ast.rs 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. use flowy_ast::EventEnumAttrs;
  2. use quote::format_ident;
  3. #[allow(dead_code)]
  4. pub struct EventASTContext {
  5. pub event: syn::Ident,
  6. pub event_ty: syn::Ident,
  7. pub event_request_struct: syn::Ident,
  8. pub event_input: Option<syn::Path>,
  9. pub event_output: Option<syn::Path>,
  10. pub event_error: String,
  11. }
  12. impl EventASTContext {
  13. #[allow(dead_code)]
  14. pub fn from(enum_attrs: &EventEnumAttrs) -> EventASTContext {
  15. let command_name = enum_attrs.enum_item_name.clone();
  16. if command_name.is_empty() {
  17. panic!("Invalid command name: {}", enum_attrs.enum_item_name);
  18. }
  19. let event = format_ident!("{}", &command_name);
  20. let splits = command_name.split('_').collect::<Vec<&str>>();
  21. let event_ty = format_ident!("{}", enum_attrs.enum_name);
  22. let event_request_struct = format_ident!("{}Event", &splits.join(""));
  23. let event_input = enum_attrs.event_input();
  24. let event_output = enum_attrs.event_output();
  25. let event_error = enum_attrs.event_error();
  26. EventASTContext {
  27. event,
  28. event_ty,
  29. event_request_struct,
  30. event_input,
  31. event_output,
  32. event_error,
  33. }
  34. }
  35. }