mirror of
				https://github.com/AppFlowy-IO/AppFlowy.git
				synced 2025-11-04 03:54:44 +00:00 
			
		
		
		
	support event input and output as optional to generate dart code
This commit is contained in:
		
							parent
							
								
									04fc7f1cd0
								
							
						
					
					
						commit
						6f3a03fa07
					
				@ -2,6 +2,20 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/// Auto gen code from rust ast, do not edit
 | 
					/// Auto gen code from rust ast, do not edit
 | 
				
			||||||
part of 'dispatch.dart';
 | 
					part of 'dispatch.dart';
 | 
				
			||||||
 | 
					class UserEventGetStatus {
 | 
				
			||||||
 | 
					    UserEventGetStatus();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Future<Either<UserDetail, FlowyError>> send() {
 | 
				
			||||||
 | 
					     final request = FFIRequest.create()
 | 
				
			||||||
 | 
					        ..event = UserEvent.GetStatus.toString();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					     return Dispatch.asyncRequest(request).then((bytesResult) => bytesResult.fold(
 | 
				
			||||||
 | 
					        (bytes) => left(UserDetail.fromBuffer(bytes)),
 | 
				
			||||||
 | 
					        (error) => right(error),
 | 
				
			||||||
 | 
					      ));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class UserEventSignIn {
 | 
					class UserEventSignIn {
 | 
				
			||||||
     SignInRequest request;
 | 
					     SignInRequest request;
 | 
				
			||||||
     UserEventSignIn(this.request);
 | 
					     UserEventSignIn(this.request);
 | 
				
			||||||
@ -46,3 +60,17 @@ class UserEventSignUp {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class UserEventSignOut {
 | 
				
			||||||
 | 
					    UserEventSignOut();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Future<Either<Uint8List, FlowyError>> send() {
 | 
				
			||||||
 | 
					     final request = FFIRequest.create()
 | 
				
			||||||
 | 
					        ..event = UserEvent.SignOut.toString();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					     return Dispatch.asyncRequest(request).then((bytesResult) => bytesResult.fold(
 | 
				
			||||||
 | 
					        (bytes) => left(bytes),
 | 
				
			||||||
 | 
					        (error) => right(error),
 | 
				
			||||||
 | 
					      ));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,2 +1,2 @@
 | 
				
			|||||||
proto_crates = ["src/kv"]
 | 
					proto_crates = ["src/kv"]
 | 
				
			||||||
event_files = [""]
 | 
					event_files = []
 | 
				
			||||||
@ -4,6 +4,7 @@ use flowy_derive::{Flowy_Event, ProtoBuf_Enum};
 | 
				
			|||||||
#[derive(Clone, Copy, PartialEq, Eq, Debug, Display, Hash, ProtoBuf_Enum, Flowy_Event)]
 | 
					#[derive(Clone, Copy, PartialEq, Eq, Debug, Display, Hash, ProtoBuf_Enum, Flowy_Event)]
 | 
				
			||||||
pub enum UserEvent {
 | 
					pub enum UserEvent {
 | 
				
			||||||
    #[display(fmt = "GetStatus")]
 | 
					    #[display(fmt = "GetStatus")]
 | 
				
			||||||
 | 
					    #[event(output = "UserDetail")]
 | 
				
			||||||
    GetStatus = 0,
 | 
					    GetStatus = 0,
 | 
				
			||||||
    #[display(fmt = "SignIn")]
 | 
					    #[display(fmt = "SignIn")]
 | 
				
			||||||
    #[event(input = "SignInRequest", output = "UserDetail")]
 | 
					    #[event(input = "SignInRequest", output = "UserDetail")]
 | 
				
			||||||
@ -12,5 +13,6 @@ pub enum UserEvent {
 | 
				
			|||||||
    #[event(input = "SignUpRequest", output = "UserDetail")]
 | 
					    #[event(input = "SignUpRequest", output = "UserDetail")]
 | 
				
			||||||
    SignUp    = 2,
 | 
					    SignUp    = 2,
 | 
				
			||||||
    #[display(fmt = "SignOut")]
 | 
					    #[display(fmt = "SignOut")]
 | 
				
			||||||
 | 
					    #[event()]
 | 
				
			||||||
    SignOut   = 3,
 | 
					    SignOut   = 3,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -100,24 +100,23 @@ pub fn parse_event_crate(event_crate: &DartEventCrate) -> Vec<EventASTContext> {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
pub fn ast_to_event_render_ctx(ast: &Vec<EventASTContext>) -> Vec<EventRenderContext> {
 | 
					pub fn ast_to_event_render_ctx(ast: &Vec<EventASTContext>) -> Vec<EventRenderContext> {
 | 
				
			||||||
    ast.iter()
 | 
					    ast.iter()
 | 
				
			||||||
        .filter(|event_ast| event_ast.event_input.is_some() && event_ast.event_output.is_some())
 | 
					        .map(|event_ast| {
 | 
				
			||||||
        .map(|event_ast| EventRenderContext {
 | 
					            let input_deserializer = match event_ast.event_input {
 | 
				
			||||||
            input_deserializer: event_ast
 | 
					                Some(ref event_input) => Some(event_input.get_ident().unwrap().to_string()),
 | 
				
			||||||
                .event_input
 | 
					                None => None,
 | 
				
			||||||
                .as_ref()
 | 
					            };
 | 
				
			||||||
                .unwrap()
 | 
					
 | 
				
			||||||
                .get_ident()
 | 
					            let output_deserializer = match event_ast.event_output {
 | 
				
			||||||
                .unwrap()
 | 
					                Some(ref event_output) => Some(event_output.get_ident().unwrap().to_string()),
 | 
				
			||||||
                .to_string(),
 | 
					                None => None,
 | 
				
			||||||
            output_deserializer: event_ast
 | 
					            };
 | 
				
			||||||
                .event_output
 | 
					
 | 
				
			||||||
                .as_ref()
 | 
					            return EventRenderContext {
 | 
				
			||||||
                .unwrap()
 | 
					                input_deserializer,
 | 
				
			||||||
                .get_ident()
 | 
					                output_deserializer,
 | 
				
			||||||
                .unwrap()
 | 
					 | 
				
			||||||
                .to_string(),
 | 
					 | 
				
			||||||
                event: event_ast.event.to_string(),
 | 
					                event: event_ast.event.to_string(),
 | 
				
			||||||
                event_ty: event_ast.event_ty.to_string(),
 | 
					                event_ty: event_ast.event_ty.to_string(),
 | 
				
			||||||
 | 
					            };
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
        .collect::<Vec<EventRenderContext>>()
 | 
					        .collect::<Vec<EventRenderContext>>()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -11,8 +11,8 @@ part of 'dispatch.dart';
 | 
				
			|||||||
"#;
 | 
					"#;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub struct EventRenderContext {
 | 
					pub struct EventRenderContext {
 | 
				
			||||||
    pub input_deserializer: String,
 | 
					    pub input_deserializer: Option<String>,
 | 
				
			||||||
    pub output_deserializer: String,
 | 
					    pub output_deserializer: Option<String>,
 | 
				
			||||||
    pub event: String,
 | 
					    pub event: String,
 | 
				
			||||||
    pub event_ty: String,
 | 
					    pub event_ty: String,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -31,16 +31,24 @@ impl EventTemplate {
 | 
				
			|||||||
                .insert("imported_dart_files", DART_IMPORTED)
 | 
					                .insert("imported_dart_files", DART_IMPORTED)
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        self.tera_context.insert("index", &index);
 | 
					        self.tera_context.insert("index", &index);
 | 
				
			||||||
 | 
					 | 
				
			||||||
        let dart_class_name = format!("{}{}", ctx.event_ty, ctx.event);
 | 
					        let dart_class_name = format!("{}{}", ctx.event_ty, ctx.event);
 | 
				
			||||||
        let event = format!("{}.{}", ctx.event_ty, ctx.event);
 | 
					        let event = format!("{}.{}", ctx.event_ty, ctx.event);
 | 
				
			||||||
 | 
					 | 
				
			||||||
        self.tera_context.insert("event_class", &dart_class_name);
 | 
					        self.tera_context.insert("event_class", &dart_class_name);
 | 
				
			||||||
        self.tera_context.insert("event", &event);
 | 
					        self.tera_context.insert("event", &event);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.tera_context
 | 
					        self.tera_context
 | 
				
			||||||
            .insert("input_deserializer", &ctx.input_deserializer);
 | 
					            .insert("has_input", &ctx.input_deserializer.is_some());
 | 
				
			||||||
 | 
					        match ctx.input_deserializer {
 | 
				
			||||||
 | 
					            None => self.tera_context.insert("input_deserializer", "Uint8List"),
 | 
				
			||||||
 | 
					            Some(ref input) => self.tera_context.insert("input_deserializer", input),
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.tera_context
 | 
					        self.tera_context
 | 
				
			||||||
            .insert("output_deserializer", &ctx.output_deserializer);
 | 
					            .insert("has_output", &ctx.output_deserializer.is_some());
 | 
				
			||||||
 | 
					        match ctx.output_deserializer {
 | 
				
			||||||
 | 
					            None => self.tera_context.insert("output_deserializer", "Uint8List"),
 | 
				
			||||||
 | 
					            Some(ref output) => self.tera_context.insert("output_deserializer", output),
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        let tera = get_tera("dart_event");
 | 
					        let tera = get_tera("dart_event");
 | 
				
			||||||
        match tera.render("event_template.tera", &self.tera_context) {
 | 
					        match tera.render("event_template.tera", &self.tera_context) {
 | 
				
			||||||
 | 
				
			|||||||
@ -3,10 +3,16 @@
 | 
				
			|||||||
{%- endif -%}
 | 
					{%- endif -%}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class {{ event_class }} {
 | 
					class {{ event_class }} {
 | 
				
			||||||
 | 
					{%- if has_input  %}
 | 
				
			||||||
     {{ input_deserializer }} request;
 | 
					     {{ input_deserializer }} request;
 | 
				
			||||||
     {{ event_class }}(this.request);
 | 
					     {{ event_class }}(this.request);
 | 
				
			||||||
 | 
					{%- else %}
 | 
				
			||||||
 | 
					    {{ event_class }}();
 | 
				
			||||||
 | 
					{%- endif %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Future<Either<{{ output_deserializer }}, FlowyError>> send() {
 | 
					    Future<Either<{{ output_deserializer }}, FlowyError>> send() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{%- if has_input  %}
 | 
				
			||||||
     return requestToBytes(request).fold(
 | 
					     return requestToBytes(request).fold(
 | 
				
			||||||
         (bytes) {
 | 
					         (bytes) {
 | 
				
			||||||
            final request = FFIRequest.create()
 | 
					            final request = FFIRequest.create()
 | 
				
			||||||
@ -21,6 +27,22 @@ class {{ event_class }} {
 | 
				
			|||||||
         },
 | 
					         },
 | 
				
			||||||
         (err) => Future(() => right(err)),
 | 
					         (err) => Future(() => right(err)),
 | 
				
			||||||
       );
 | 
					       );
 | 
				
			||||||
 | 
					{%- else %}
 | 
				
			||||||
 | 
					     final request = FFIRequest.create()
 | 
				
			||||||
 | 
					        ..event = {{ event }}.toString();
 | 
				
			||||||
 | 
					        {%- if has_input  %}
 | 
				
			||||||
 | 
					        ..payload = bytes;
 | 
				
			||||||
 | 
					        {%- endif %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					     return Dispatch.asyncRequest(request).then((bytesResult) => bytesResult.fold(
 | 
				
			||||||
 | 
					     {%- if has_output  %}
 | 
				
			||||||
 | 
					        (bytes) => left({{ output_deserializer }}.fromBuffer(bytes)),
 | 
				
			||||||
 | 
					     {%- else %}
 | 
				
			||||||
 | 
					        (bytes) => left(bytes),
 | 
				
			||||||
 | 
					     {%- endif %}
 | 
				
			||||||
 | 
					        (error) => right(error),
 | 
				
			||||||
 | 
					      ));
 | 
				
			||||||
 | 
					{%- endif %}
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user