mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2024-08-30 18:12:39 +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