workspace and app dto

This commit is contained in:
appflowy
2021-07-13 23:08:20 +08:00
parent 5de69abb36
commit df1d84d43d
63 changed files with 1454 additions and 148 deletions

View File

@ -18,6 +18,7 @@ pub fn category_from_str(type_str: &str) -> TypeCategory {
"KeyValue"
| "CreateAppRequest"
| "ColorStyle"
| "UpdateAppRequest"
| "UpdateWorkspaceRequest"
| "CreateWorkspaceRequest"
| "WorkspaceError"

View File

@ -88,7 +88,7 @@ fn token_stream_for_one_of(ctxt: &Ctxt, field: &ASTField) -> Option<TokenStream>
},
_ => {
let take_func = format_ident!("take_{}", ident.to_string());
let ty = ty_info.ty;
let ty = bracketed_ty_info.unwrap().ty;
Some(quote! {
if pb.#has_func() {
let val = #ty::try_from(&mut pb.#take_func()).unwrap();

View File

@ -1,4 +1,7 @@
use crate::{derive_cache::TypeCategory, proto_buf::util::ident_category};
use crate::{
derive_cache::TypeCategory,
proto_buf::util::{get_member_ident, ident_category},
};
use flowy_ast::*;
use proc_macro2::TokenStream;
@ -12,12 +15,6 @@ pub fn make_se_token_stream(ctxt: &Ctxt, ast: &ASTContainer) -> Option<TokenStre
.filter(|f| !f.attrs.skip_serializing())
.flat_map(|field| se_token_stream_for_field(&ctxt, &field, false));
// let _build_set_fields = ast
// .data
// .all_fields()
// .filter(|f| !f.attrs.skip_serializing())
// .flat_map(|field| se_token_stream_for_field(&ctxt, &field, false));
let se_token_stream: TokenStream = quote! {
impl std::convert::TryInto<Vec<u8>> for #struct_ident {
@ -52,27 +49,36 @@ fn se_token_stream_for_field(ctxt: &Ctxt, field: &ASTField, _take: bool) -> Opti
let member = &field.member;
Some(quote! { pb.#member=self.#func(); })
} else if field.attrs.is_one_of() {
let member = &field.member;
match &field.member {
syn::Member::Named(ref ident) => {
let set_func = format_ident!("set_{}", ident.to_string());
Some(quote! {
match self.#member {
Some(ref s) => { pb.#set_func(s.clone()) }
None => {}
}
})
},
_ => {
ctxt.error_spanned_by(member, format!("Unsupported member, get member ident fail"));
None
},
}
token_stream_for_one_of(ctxt, field)
} else {
gen_token_stream(ctxt, &field.member, &field.ty, false)
}
}
fn token_stream_for_one_of(ctxt: &Ctxt, field: &ASTField) -> Option<TokenStream> {
let member = &field.member;
let ident = get_member_ident(ctxt, member)?;
let ty_info = parse_ty(ctxt, &field.ty)?;
let bracketed_ty_info = ty_info.bracket_ty_info.as_ref().as_ref();
let set_func = format_ident!("set_{}", ident.to_string());
match ident_category(bracketed_ty_info.unwrap().ident) {
TypeCategory::Protobuf => Some(quote! {
match self.#member {
Some(s) => { pb.#set_func(s.try_into().unwrap()) }
None => {}
}
}),
_ => Some(quote! {
match self.#member {
Some(ref s) => { pb.#set_func(s.clone()) }
None => {}
}
}),
}
}
fn gen_token_stream(
ctxt: &Ctxt,
member: &syn::Member,