event_ast.rs 1.1 KB

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