Explorar el Código

support event input and output as optional to generate dart code

appflowy hace 4 años
padre
commit
6f3a03fa07

+ 60 - 32
app_flowy/packages/flowy_sdk/lib/dispatch/code_gen.dart

@@ -2,47 +2,75 @@
 
 /// Auto gen code from rust ast, do not edit
 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 {
-    SignInRequest request;
-    UserEventSignIn(this.request);
+     SignInRequest request;
+     UserEventSignIn(this.request);
 
     Future<Either<UserDetail, FlowyError>> send() {
-    return requestToBytes(request).fold(
-        (bytes) {
-          final request = FFIRequest.create()
-            ..event = UserEvent.SignIn.toString()
-            ..payload = bytes;
-
-          return Dispatch.asyncRequest(request)
-              .then((bytesResult) => bytesResult.fold(
-                    (bytes) => left(UserDetail.fromBuffer(bytes)),
-                    (error) => right(error),
-                  ));
-        },
-        (err) => Future(() => right(err)),
-        );
+     return requestToBytes(request).fold(
+         (bytes) {
+            final request = FFIRequest.create()
+             ..event = UserEvent.SignIn.toString()
+             ..payload = bytes;
+
+           return Dispatch.asyncRequest(request)
+               .then((bytesResult) => bytesResult.fold(
+                 (bytes) => left(UserDetail.fromBuffer(bytes)),
+                 (error) => right(error),
+               ));
+         },
+         (err) => Future(() => right(err)),
+       );
     }
 }
 
 class UserEventSignUp {
-    SignUpRequest request;
-    UserEventSignUp(this.request);
+     SignUpRequest request;
+     UserEventSignUp(this.request);
 
     Future<Either<UserDetail, FlowyError>> send() {
-    return requestToBytes(request).fold(
-        (bytes) {
-          final request = FFIRequest.create()
-            ..event = UserEvent.SignUp.toString()
-            ..payload = bytes;
-
-          return Dispatch.asyncRequest(request)
-              .then((bytesResult) => bytesResult.fold(
-                    (bytes) => left(UserDetail.fromBuffer(bytes)),
-                    (error) => right(error),
-                  ));
-        },
-        (err) => Future(() => right(err)),
-        );
+     return requestToBytes(request).fold(
+         (bytes) {
+            final request = FFIRequest.create()
+             ..event = UserEvent.SignUp.toString()
+             ..payload = bytes;
+
+           return Dispatch.asyncRequest(request)
+               .then((bytesResult) => bytesResult.fold(
+                 (bytes) => left(UserDetail.fromBuffer(bytes)),
+                 (error) => right(error),
+               ));
+         },
+         (err) => Future(() => right(err)),
+       );
+    }
+}
+
+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 - 1
rust-lib/flowy-infra/Flowy.toml

@@ -1,2 +1,2 @@
 proto_crates = ["src/kv"]
-event_files = [""]
+event_files = []

+ 2 - 0
rust-lib/flowy-user/src/event.rs

@@ -4,6 +4,7 @@ use flowy_derive::{Flowy_Event, ProtoBuf_Enum};
 #[derive(Clone, Copy, PartialEq, Eq, Debug, Display, Hash, ProtoBuf_Enum, Flowy_Event)]
 pub enum UserEvent {
     #[display(fmt = "GetStatus")]
+    #[event(output = "UserDetail")]
     GetStatus = 0,
     #[display(fmt = "SignIn")]
     #[event(input = "SignInRequest", output = "UserDetail")]
@@ -12,5 +13,6 @@ pub enum UserEvent {
     #[event(input = "SignUpRequest", output = "UserDetail")]
     SignUp    = 2,
     #[display(fmt = "SignOut")]
+    #[event()]
     SignOut   = 3,
 }

+ 17 - 18
scripts/flowy-tool/src/dart_event/dart_event.rs

@@ -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> {
     ast.iter()
-        .filter(|event_ast| event_ast.event_input.is_some() && event_ast.event_output.is_some())
-        .map(|event_ast| EventRenderContext {
-            input_deserializer: event_ast
-                .event_input
-                .as_ref()
-                .unwrap()
-                .get_ident()
-                .unwrap()
-                .to_string(),
-            output_deserializer: event_ast
-                .event_output
-                .as_ref()
-                .unwrap()
-                .get_ident()
-                .unwrap()
-                .to_string(),
-            event: event_ast.event.to_string(),
-            event_ty: event_ast.event_ty.to_string(),
+        .map(|event_ast| {
+            let input_deserializer = match event_ast.event_input {
+                Some(ref event_input) => Some(event_input.get_ident().unwrap().to_string()),
+                None => None,
+            };
+
+            let output_deserializer = match event_ast.event_output {
+                Some(ref event_output) => Some(event_output.get_ident().unwrap().to_string()),
+                None => None,
+            };
+
+            return EventRenderContext {
+                input_deserializer,
+                output_deserializer,
+                event: event_ast.event.to_string(),
+                event_ty: event_ast.event_ty.to_string(),
+            };
         })
         .collect::<Vec<EventRenderContext>>()
 }

+ 14 - 6
scripts/flowy-tool/src/dart_event/event_template.rs

@@ -11,8 +11,8 @@ part of 'dispatch.dart';
 "#;
 
 pub struct EventRenderContext {
-    pub input_deserializer: String,
-    pub output_deserializer: String,
+    pub input_deserializer: Option<String>,
+    pub output_deserializer: Option<String>,
     pub event: String,
     pub event_ty: String,
 }
@@ -31,16 +31,24 @@ impl EventTemplate {
                 .insert("imported_dart_files", DART_IMPORTED)
         }
         self.tera_context.insert("index", &index);
-
         let dart_class_name = 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", &event);
+
         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
-            .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");
         match tera.render("event_template.tera", &self.tera_context) {

+ 37 - 15
scripts/flowy-tool/src/dart_event/event_template.tera

@@ -3,24 +3,46 @@
 {%- endif -%}
 
 class {{ event_class }} {
-    {{ input_deserializer }} request;
-    {{ event_class }}(this.request);
+{%- if has_input  %}
+     {{ input_deserializer }} request;
+     {{ event_class }}(this.request);
+{%- else %}
+    {{ event_class }}();
+{%- endif %}
 
     Future<Either<{{ output_deserializer }}, FlowyError>> send() {
-    return requestToBytes(request).fold(
-        (bytes) {
-          final request = FFIRequest.create()
-            ..event = {{ event }}.toString()
-            ..payload = bytes;
 
-          return Dispatch.asyncRequest(request)
-              .then((bytesResult) => bytesResult.fold(
-                    (bytes) => left({{ output_deserializer }}.fromBuffer(bytes)),
-                    (error) => right(error),
-                  ));
-        },
-        (err) => Future(() => right(err)),
-        );
+{%- if has_input  %}
+     return requestToBytes(request).fold(
+         (bytes) {
+            final request = FFIRequest.create()
+             ..event = {{ event }}.toString()
+             ..payload = bytes;
+
+           return Dispatch.asyncRequest(request)
+               .then((bytesResult) => bytesResult.fold(
+                 (bytes) => left({{ output_deserializer }}.fromBuffer(bytes)),
+                 (error) => right(error),
+               ));
+         },
+         (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 %}
     }
 }