mod.rs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. mod deserialize;
  2. mod enum_serde;
  3. mod serialize;
  4. mod util;
  5. use crate::proto_buf::{
  6. deserialize::make_de_token_steam, enum_serde::make_enum_token_stream,
  7. serialize::make_se_token_stream,
  8. };
  9. use flowy_ast::*;
  10. use proc_macro2::TokenStream;
  11. use std::default::Default;
  12. pub fn expand_derive(input: &syn::DeriveInput) -> Result<TokenStream, Vec<syn::Error>> {
  13. let ast_result = ASTResult::new();
  14. let cont = match ASTContainer::from_ast(&ast_result, input) {
  15. Some(cont) => cont,
  16. None => return Err(ast_result.check().unwrap_err()),
  17. };
  18. let mut token_stream: TokenStream = TokenStream::default();
  19. if let Some(de_token_stream) = make_de_token_steam(&ast_result, &cont) {
  20. token_stream.extend(de_token_stream);
  21. }
  22. if let Some(se_token_stream) = make_se_token_stream(&ast_result, &cont) {
  23. token_stream.extend(se_token_stream);
  24. }
  25. ast_result.check()?;
  26. Ok(token_stream)
  27. }
  28. pub fn expand_enum_derive(input: &syn::DeriveInput) -> Result<TokenStream, Vec<syn::Error>> {
  29. let ast_result = ASTResult::new();
  30. let cont = match ASTContainer::from_ast(&ast_result, input) {
  31. Some(cont) => cont,
  32. None => return Err(ast_result.check().unwrap_err()),
  33. };
  34. let mut token_stream: TokenStream = TokenStream::default();
  35. if let Some(enum_token_stream) = make_enum_token_stream(&ast_result, &cont) {
  36. token_stream.extend(enum_token_stream);
  37. }
  38. ast_result.check()?;
  39. Ok(token_stream)
  40. }
  41. // #[macro_use]
  42. // macro_rules! impl_try_for_primitive_type {
  43. // ($target:ident) => {
  44. // impl std::convert::TryFrom<&$target> for $target {
  45. // type Error = String;
  46. // fn try_from(val: &$target) -> Result<Self, Self::Error> {
  47. // Ok(val.clone()) } }
  48. //
  49. // impl std::convert::TryInto<$target> for $target {
  50. // type Error = String;
  51. //
  52. // fn try_into(self) -> Result<Self, Self::Error> { Ok(self) }
  53. // }
  54. // };
  55. // }
  56. //
  57. // impl_try_for_primitive_type!(String);
  58. // impl_try_for_primitive_type!(i64);
  59. // impl_try_for_primitive_type!(i32);
  60. // impl_try_for_primitive_type!(i16);
  61. // impl_try_for_primitive_type!(u64);
  62. // impl_try_for_primitive_type!(u32);
  63. // impl_try_for_primitive_type!(u16);
  64. // impl_try_for_primitive_type!(bool);
  65. // impl_try_for_primitive_type!(f64);
  66. // impl_try_for_primitive_type!(f32);