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,47 +2,75 @@
|
||||
|
||||
/// Auto gen code from rust ast, do not edit
|
||||
part of 'dispatch.dart';
|
||||
class UserEventSignIn {
|
||||
SignInRequest request;
|
||||
UserEventSignIn(this.request);
|
||||
class UserEventGetStatus {
|
||||
UserEventGetStatus();
|
||||
|
||||
Future<Either<UserDetail, FlowyError>> send() {
|
||||
return requestToBytes(request).fold(
|
||||
(bytes) {
|
||||
final request = FFIRequest.create()
|
||||
..event = UserEvent.SignIn.toString()
|
||||
..payload = bytes;
|
||||
final request = FFIRequest.create()
|
||||
..event = UserEvent.GetStatus.toString();
|
||||
|
||||
return Dispatch.asyncRequest(request)
|
||||
.then((bytesResult) => bytesResult.fold(
|
||||
(bytes) => left(UserDetail.fromBuffer(bytes)),
|
||||
(error) => right(error),
|
||||
));
|
||||
},
|
||||
(err) => Future(() => right(err)),
|
||||
);
|
||||
return Dispatch.asyncRequest(request).then((bytesResult) => bytesResult.fold(
|
||||
(bytes) => left(UserDetail.fromBuffer(bytes)),
|
||||
(error) => right(error),
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
class UserEventSignIn {
|
||||
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)),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
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 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 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,2 +1,2 @@
|
||||
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)]
|
||||
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,
|
||||
}
|
||||
|
@ -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>>()
|
||||
}
|
||||
|
@ -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) {
|
||||
|
@ -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 %}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user