diff --git a/frontend/Makefile.toml b/frontend/Makefile.toml index 46f7279240..f7c47820cd 100644 --- a/frontend/Makefile.toml +++ b/frontend/Makefile.toml @@ -21,7 +21,7 @@ PRODUCT_NAME = "AppFlowy" CRATE_TYPE = "staticlib" SDK_EXT = "a" APP_ENVIRONMENT = "local" -FLUTTER_FLOWY_SDK_PATH="app_flowy/packages/flowy_sdk/lib/protobuf" +FLUTTER_FLOWY_SDK_PATH="app_flowy/packages/flowy_sdk" PROTOBUF_DERIVE_CACHE="../shared-lib/flowy-derive/src/derive_cache/derive_cache.rs" [env.development-mac] @@ -158,8 +158,8 @@ script_runner = "@duckscript" condition = { env_set = [ "FLUTTER_FLOWY_SDK_PATH"] } script = [ """ - cd ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/../shared-lib/error-code - cargo build -vv + cd ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/rust-lib/flowy-net + cargo build -vv --features=dart """, ] script_runner = "@shell" diff --git a/frontend/app_flowy/packages/flowy_sdk/lib/dispatch/code_gen.dart b/frontend/app_flowy/packages/flowy_sdk/lib/dispatch/code_gen.dart index 1029bbfd78..40ccbc8065 100644 --- a/frontend/app_flowy/packages/flowy_sdk/lib/dispatch/code_gen.dart +++ b/frontend/app_flowy/packages/flowy_sdk/lib/dispatch/code_gen.dart @@ -1,5 +1,4 @@ - /// Auto gen code from rust ast, do not edit part of 'dispatch.dart'; class FolderEventCreateWorkspace { diff --git a/frontend/app_flowy/packages/flowy_sdk/lib/protobuf/flowy-net/event_map.pb.dart b/frontend/app_flowy/packages/flowy_sdk/lib/protobuf/flowy-net/event_map.pb.dart new file mode 100644 index 0000000000..5bfad20674 --- /dev/null +++ b/frontend/app_flowy/packages/flowy_sdk/lib/protobuf/flowy-net/event_map.pb.dart @@ -0,0 +1,11 @@ +/// +// Generated code. Do not modify. +// source: event_map.proto +// +// @dart = 2.12 +// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields + +import 'dart:core' as $core; + +export 'event_map.pbenum.dart'; + diff --git a/frontend/app_flowy/packages/flowy_sdk/lib/protobuf/flowy-net/event_map.pbenum.dart b/frontend/app_flowy/packages/flowy_sdk/lib/protobuf/flowy-net/event_map.pbenum.dart new file mode 100644 index 0000000000..1fa669c16f --- /dev/null +++ b/frontend/app_flowy/packages/flowy_sdk/lib/protobuf/flowy-net/event_map.pbenum.dart @@ -0,0 +1,24 @@ +/// +// Generated code. Do not modify. +// source: event_map.proto +// +// @dart = 2.12 +// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields + +// ignore_for_file: UNDEFINED_SHOWN_NAME +import 'dart:core' as $core; +import 'package:protobuf/protobuf.dart' as $pb; + +class NetworkEvent extends $pb.ProtobufEnum { + static const NetworkEvent UpdateNetworkType = NetworkEvent._(0, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'UpdateNetworkType'); + + static const $core.List values = [ + UpdateNetworkType, + ]; + + static final $core.Map<$core.int, NetworkEvent> _byValue = $pb.ProtobufEnum.initByValue(values); + static NetworkEvent? valueOf($core.int value) => _byValue[value]; + + const NetworkEvent._($core.int v, $core.String n) : super(v, n); +} + diff --git a/frontend/app_flowy/packages/flowy_sdk/lib/protobuf/flowy-net/event_map.pbjson.dart b/frontend/app_flowy/packages/flowy_sdk/lib/protobuf/flowy-net/event_map.pbjson.dart new file mode 100644 index 0000000000..39d0bbde12 --- /dev/null +++ b/frontend/app_flowy/packages/flowy_sdk/lib/protobuf/flowy-net/event_map.pbjson.dart @@ -0,0 +1,20 @@ +/// +// Generated code. Do not modify. +// source: event_map.proto +// +// @dart = 2.12 +// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields,deprecated_member_use_from_same_package + +import 'dart:core' as $core; +import 'dart:convert' as $convert; +import 'dart:typed_data' as $typed_data; +@$core.Deprecated('Use networkEventDescriptor instead') +const NetworkEvent$json = const { + '1': 'NetworkEvent', + '2': const [ + const {'1': 'UpdateNetworkType', '2': 0}, + ], +}; + +/// Descriptor for `NetworkEvent`. Decode as a `google.protobuf.EnumDescriptorProto`. +final $typed_data.Uint8List networkEventDescriptor = $convert.base64Decode('CgxOZXR3b3JrRXZlbnQSFQoRVXBkYXRlTmV0d29ya1R5cGUQAA=='); diff --git a/frontend/app_flowy/packages/flowy_sdk/lib/protobuf/flowy-net/event_map.pbserver.dart b/frontend/app_flowy/packages/flowy_sdk/lib/protobuf/flowy-net/event_map.pbserver.dart new file mode 100644 index 0000000000..e359d1146c --- /dev/null +++ b/frontend/app_flowy/packages/flowy_sdk/lib/protobuf/flowy-net/event_map.pbserver.dart @@ -0,0 +1,9 @@ +/// +// Generated code. Do not modify. +// source: event_map.proto +// +// @dart = 2.12 +// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields,deprecated_member_use_from_same_package + +export 'event_map.pb.dart'; + diff --git a/frontend/app_flowy/packages/flowy_sdk/lib/protobuf/flowy-net/protobuf.dart b/frontend/app_flowy/packages/flowy_sdk/lib/protobuf/flowy-net/protobuf.dart index 8d2a575e3c..20c0bc012d 100644 --- a/frontend/app_flowy/packages/flowy_sdk/lib/protobuf/flowy-net/protobuf.dart +++ b/frontend/app_flowy/packages/flowy_sdk/lib/protobuf/flowy-net/protobuf.dart @@ -1,3 +1,3 @@ // Auto-generated, do not edit export './network_state.pb.dart'; -export './event.pb.dart'; +export './event_map.pb.dart'; diff --git a/frontend/rust-lib/dart-ffi/Cargo.toml b/frontend/rust-lib/dart-ffi/Cargo.toml index 7bbd53f824..b84944b88f 100644 --- a/frontend/rust-lib/dart-ffi/Cargo.toml +++ b/frontend/rust-lib/dart-ffi/Cargo.toml @@ -29,8 +29,8 @@ dart-notify = {path = "../dart-notify" } flowy-derive = {path = "../../../shared-lib/flowy-derive" } [features] -default = ["flowy-sdk/dart"] -flutter = ["dart-notify/dart"] +default = ["flowy-sdk/dart", "dart-notify/dart", "flutter"] +flutter = [] http_server = ["flowy-sdk/http_server", "flowy-sdk/use_bunyan"] #use_serde = ["bincode"] #use_protobuf= ["protobuf"] diff --git a/frontend/rust-lib/dart-ffi/build.rs b/frontend/rust-lib/dart-ffi/build.rs index 7f06ab48c8..01f337bce8 100644 --- a/frontend/rust-lib/dart-ffi/build.rs +++ b/frontend/rust-lib/dart-ffi/build.rs @@ -1,5 +1,16 @@ use lib_infra::code_gen; +use lib_infra::code_gen::dart_event; fn main() { code_gen::protobuf_file::gen(env!("CARGO_PKG_NAME"), "./src/protobuf/proto"); + #[cfg(feature = "flutter")] + copy_dart_event_files(); +} + +#[cfg(feature = "flutter")] +fn copy_dart_event_files() { + let workspace_dir = std::env::var("CARGO_MAKE_WORKING_DIRECTORY").unwrap(); + let flutter_sdk_path = std::env::var("FLUTTER_FLOWY_SDK_PATH").unwrap(); + let output_file = format!("{}/{}/lib/dispatch/code_gen.dart", workspace_dir, flutter_sdk_path); + dart_event::write_dart_event_file(&output_file); } diff --git a/frontend/rust-lib/flowy-folder/build.rs b/frontend/rust-lib/flowy-folder/build.rs index 5d30db316f..4ab7b9e23d 100644 --- a/frontend/rust-lib/flowy-folder/build.rs +++ b/frontend/rust-lib/flowy-folder/build.rs @@ -3,5 +3,5 @@ use lib_infra::code_gen; fn main() { let crate_name = env!("CARGO_PKG_NAME"); code_gen::protobuf_file::gen(crate_name, "./src/protobuf/proto"); - // dart_event::gen(crate_name); + code_gen::dart_event::gen(crate_name); } diff --git a/frontend/rust-lib/flowy-net/Flowy.toml b/frontend/rust-lib/flowy-net/Flowy.toml index e25305c348..055287f500 100644 --- a/frontend/rust-lib/flowy-net/Flowy.toml +++ b/frontend/rust-lib/flowy-net/Flowy.toml @@ -1,2 +1,2 @@ -proto_crates = ["src/event.rs", "src/entities"] -event_files = ["src/event.rs"] \ No newline at end of file +proto_crates = ["src/event_map.rs", "src/entities"] +event_files = ["src/event_map.rs"] \ No newline at end of file diff --git a/frontend/rust-lib/flowy-net/build.rs b/frontend/rust-lib/flowy-net/build.rs index 7f06ab48c8..4ab7b9e23d 100644 --- a/frontend/rust-lib/flowy-net/build.rs +++ b/frontend/rust-lib/flowy-net/build.rs @@ -1,5 +1,7 @@ use lib_infra::code_gen; fn main() { - code_gen::protobuf_file::gen(env!("CARGO_PKG_NAME"), "./src/protobuf/proto"); + let crate_name = env!("CARGO_PKG_NAME"); + code_gen::protobuf_file::gen(crate_name, "./src/protobuf/proto"); + code_gen::dart_event::gen(crate_name); } diff --git a/frontend/rust-lib/flowy-net/src/event.rs b/frontend/rust-lib/flowy-net/src/event.rs deleted file mode 100644 index 81b4060f68..0000000000 --- a/frontend/rust-lib/flowy-net/src/event.rs +++ /dev/null @@ -1,9 +0,0 @@ -use flowy_derive::{Flowy_Event, ProtoBuf_Enum}; -use strum_macros::Display; - -#[derive(Clone, Copy, PartialEq, Eq, Debug, Display, Hash, ProtoBuf_Enum, Flowy_Event)] -#[event_err = "FlowyError"] -pub enum NetworkEvent { - #[event(input = "NetworkState")] - UpdateNetworkType = 0, -} diff --git a/frontend/rust-lib/flowy-net/src/event_map.rs b/frontend/rust-lib/flowy-net/src/event_map.rs new file mode 100644 index 0000000000..4fce155360 --- /dev/null +++ b/frontend/rust-lib/flowy-net/src/event_map.rs @@ -0,0 +1,19 @@ +use crate::{handlers::*, ws::connection::FlowyWebSocketConnect}; +use flowy_derive::{Flowy_Event, ProtoBuf_Enum}; +use lib_dispatch::prelude::*; +use std::sync::Arc; +use strum_macros::Display; + +pub fn create(ws_conn: Arc) -> Module { + Module::new() + .name("Flowy-Network") + .data(ws_conn) + .event(NetworkEvent::UpdateNetworkType, update_network_ty) +} + +#[derive(Clone, Copy, PartialEq, Eq, Debug, Display, Hash, ProtoBuf_Enum, Flowy_Event)] +#[event_err = "FlowyError"] +pub enum NetworkEvent { + #[event(input = "NetworkState")] + UpdateNetworkType = 0, +} diff --git a/frontend/rust-lib/flowy-net/src/lib.rs b/frontend/rust-lib/flowy-net/src/lib.rs index 78f8a28f02..6347e3f459 100644 --- a/frontend/rust-lib/flowy-net/src/lib.rs +++ b/frontend/rust-lib/flowy-net/src/lib.rs @@ -1,10 +1,9 @@ mod configuration; pub mod entities; -mod event; +pub mod event_map; mod handlers; pub mod http_server; pub mod local_server; -pub mod module; pub mod protobuf; mod request; pub mod ws; diff --git a/frontend/rust-lib/flowy-net/src/module.rs b/frontend/rust-lib/flowy-net/src/module.rs deleted file mode 100644 index 26de3769f3..0000000000 --- a/frontend/rust-lib/flowy-net/src/module.rs +++ /dev/null @@ -1,10 +0,0 @@ -use crate::{event::NetworkEvent, handlers::*, ws::connection::FlowyWebSocketConnect}; -use lib_dispatch::prelude::*; -use std::sync::Arc; - -pub fn create(ws_conn: Arc) -> Module { - Module::new() - .name("Flowy-Network") - .data(ws_conn) - .event(NetworkEvent::UpdateNetworkType, update_network_ty) -} diff --git a/frontend/rust-lib/flowy-net/src/protobuf/model/event.rs b/frontend/rust-lib/flowy-net/src/protobuf/model/event_map.rs similarity index 94% rename from frontend/rust-lib/flowy-net/src/protobuf/model/event.rs rename to frontend/rust-lib/flowy-net/src/protobuf/model/event_map.rs index 765d45a594..5eb3ed93d9 100644 --- a/frontend/rust-lib/flowy-net/src/protobuf/model/event.rs +++ b/frontend/rust-lib/flowy-net/src/protobuf/model/event_map.rs @@ -17,7 +17,7 @@ #![allow(trivial_casts)] #![allow(unused_imports)] #![allow(unused_results)] -//! Generated file from `event.proto` +//! Generated file from `event_map.proto` /// Generated files are compatible only with the same version /// of protobuf runtime. @@ -71,8 +71,8 @@ impl ::protobuf::reflect::ProtobufValue for NetworkEvent { } static file_descriptor_proto_data: &'static [u8] = b"\ - \n\x0bevent.proto*%\n\x0cNetworkEvent\x12\x15\n\x11UpdateNetworkType\x10\ - \0b\x06proto3\ + \n\x0fevent_map.proto*%\n\x0cNetworkEvent\x12\x15\n\x11UpdateNetworkType\ + \x10\0b\x06proto3\ "; static file_descriptor_proto_lazy: ::protobuf::rt::LazyV2<::protobuf::descriptor::FileDescriptorProto> = ::protobuf::rt::LazyV2::INIT; diff --git a/frontend/rust-lib/flowy-net/src/protobuf/model/mod.rs b/frontend/rust-lib/flowy-net/src/protobuf/model/mod.rs index 105757dc0c..dd4f933626 100644 --- a/frontend/rust-lib/flowy-net/src/protobuf/model/mod.rs +++ b/frontend/rust-lib/flowy-net/src/protobuf/model/mod.rs @@ -4,5 +4,5 @@ mod network_state; pub use network_state::*; -mod event; -pub use event::*; +mod event_map; +pub use event_map::*; diff --git a/frontend/rust-lib/flowy-net/src/protobuf/proto/event.proto b/frontend/rust-lib/flowy-net/src/protobuf/proto/event_map.proto similarity index 100% rename from frontend/rust-lib/flowy-net/src/protobuf/proto/event.proto rename to frontend/rust-lib/flowy-net/src/protobuf/proto/event_map.proto diff --git a/frontend/rust-lib/flowy-sdk/src/module.rs b/frontend/rust-lib/flowy-sdk/src/module.rs index 00fb88cec4..b88300d529 100644 --- a/frontend/rust-lib/flowy-sdk/src/module.rs +++ b/frontend/rust-lib/flowy-sdk/src/module.rs @@ -24,5 +24,5 @@ fn mk_folder_module(core: Arc) -> Module { } fn mk_network_module(ws_conn: Arc) -> Module { - flowy_net::module::create(ws_conn) + flowy_net::event_map::create(ws_conn) } diff --git a/frontend/rust-lib/flowy-user/build.rs b/frontend/rust-lib/flowy-user/build.rs index 7f06ab48c8..4ab7b9e23d 100644 --- a/frontend/rust-lib/flowy-user/build.rs +++ b/frontend/rust-lib/flowy-user/build.rs @@ -1,5 +1,7 @@ use lib_infra::code_gen; fn main() { - code_gen::protobuf_file::gen(env!("CARGO_PKG_NAME"), "./src/protobuf/proto"); + let crate_name = env!("CARGO_PKG_NAME"); + code_gen::protobuf_file::gen(crate_name, "./src/protobuf/proto"); + code_gen::dart_event::gen(crate_name); } diff --git a/frontend/rust-lib/flowy-user/src/event.rs b/frontend/rust-lib/flowy-user/src/event.rs deleted file mode 100644 index 617fd252eb..0000000000 --- a/frontend/rust-lib/flowy-user/src/event.rs +++ /dev/null @@ -1,27 +0,0 @@ -use flowy_derive::{Flowy_Event, ProtoBuf_Enum}; -use strum_macros::Display; - -#[derive(Clone, Copy, PartialEq, Eq, Debug, Display, Hash, ProtoBuf_Enum, Flowy_Event)] -#[event_err = "FlowyError"] -pub enum UserEvent { - #[event()] - InitUser = 0, - - #[event(input = "SignInRequest", output = "UserProfile")] - SignIn = 1, - - #[event(input = "SignUpRequest", output = "UserProfile")] - SignUp = 2, - - #[event(passthrough)] - SignOut = 3, - - #[event(input = "UpdateUserRequest")] - UpdateUser = 4, - - #[event(output = "UserProfile")] - GetUserProfile = 5, - - #[event(output = "UserProfile")] - CheckUser = 6, -} diff --git a/shared-lib/flowy-derive/src/proto_buf/util.rs b/shared-lib/flowy-derive/src/proto_buf/util.rs index e214de0f40..f88a1e453a 100644 --- a/shared-lib/flowy-derive/src/proto_buf/util.rs +++ b/shared-lib/flowy-derive/src/proto_buf/util.rs @@ -54,6 +54,7 @@ pub fn category_from_str(type_str: String) -> TypeCategory { for path in WalkDir::new(cache_dir) .into_iter() .filter_map(|e| e.ok()) + .filter(|e| e.path().file_stem().unwrap().to_str().unwrap() == "proto_cache") .map(|e| e.path().to_str().unwrap().to_string()) { match read_file(&path) { diff --git a/shared-lib/lib-infra/Cargo.toml b/shared-lib/lib-infra/Cargo.toml index 47e9d77fdf..fc2338ec0d 100644 --- a/shared-lib/lib-infra/Cargo.toml +++ b/shared-lib/lib-infra/Cargo.toml @@ -49,4 +49,4 @@ proto_gen = [ ] pb_gen = ["cmd_lib", "protoc-rust", "walkdir", "protoc-bin-vendored",] dart_event = ["walkdir", "flowy-ast", "tera", "syn"] -dart = ["proto_gen"] \ No newline at end of file +dart = ["proto_gen", "dart_event"] \ No newline at end of file diff --git a/shared-lib/lib-infra/src/code_gen/dart_event/dart_event.rs b/shared-lib/lib-infra/src/code_gen/dart_event/dart_event.rs index 0e64e29147..697fd8b0a1 100644 --- a/shared-lib/lib-infra/src/code_gen/dart_event/dart_event.rs +++ b/shared-lib/lib-infra/src/code_gen/dart_event/dart_event.rs @@ -1,6 +1,6 @@ use super::event_template::*; use crate::code_gen::flowy_toml::{parse_crate_config_from, CrateConfig}; -use crate::code_gen::util::{cache_dir, is_crate_dir, is_hidden, read_file, save_content_to_file_with_diff_prompt}; +use crate::code_gen::util::{cache_dir, is_crate_dir, is_hidden, read_file}; use flowy_ast::{event_ast::*, *}; use std::fs::File; use std::io::Write; @@ -8,7 +8,8 @@ use syn::Item; use walkdir::WalkDir; pub fn gen(crate_name: &str) { - let event_crates = parse_dart_event_files(vec![".".to_owned()]); + let crate_path = std::fs::canonicalize(".").unwrap().as_path().display().to_string(); + let event_crates = parse_dart_event_files(vec![crate_path]); let event_ast = event_crates.iter().map(parse_event_crate).flatten().collect::>(); let event_render_ctx = ast_to_event_render_ctx(event_ast.as_ref()); @@ -23,6 +24,7 @@ pub fn gen(crate_name: &str) { let cache_dir = format!("{}/{}", cache_dir(), crate_name); let dart_event_file_path = format!("{}/dart_event.dart", cache_dir); + match std::fs::OpenOptions::new() .create(true) .write(true) @@ -34,16 +36,50 @@ pub fn gen(crate_name: &str) { file.write_all(render_result.as_bytes()).unwrap(); File::flush(file).unwrap(); } - Err(_err) => { - panic!("Failed to open file: {}", dart_event_file_path); + Err(err) => { + panic!("Failed to open file: {}, {:?}", dart_event_file_path, err); } } } +const DART_IMPORTED: &str = r#" +/// Auto gen code from rust ast, do not edit +part of 'dispatch.dart'; +"#; + +pub fn write_dart_event_file(file_path: &str) { + let cache_dir = cache_dir(); + let mut content = DART_IMPORTED.to_owned(); + for path in WalkDir::new(cache_dir) + .into_iter() + .filter_map(|e| e.ok()) + .filter(|e| e.path().file_stem().unwrap().to_str().unwrap() == "dart_event") + .map(|e| e.path().to_str().unwrap().to_string()) + { + let file_content = read_file(path.as_ref()).unwrap(); + content.push_str(&file_content); + } + + match std::fs::OpenOptions::new() + .create(true) + .write(true) + .append(false) + .truncate(true) + .open(&file_path) + { + Ok(ref mut file) => { + file.write_all(content.as_bytes()).unwrap(); + File::flush(file).unwrap(); + } + Err(err) => { + panic!("Failed to write dart event file: {}", err); + } + } +} + +#[derive(Debug)] pub struct DartEventCrate { crate_path: String, - #[allow(dead_code)] - crate_name: String, event_files: Vec, } @@ -51,7 +87,6 @@ impl DartEventCrate { pub fn from_config(config: &CrateConfig) -> Self { DartEventCrate { crate_path: config.crate_path.clone(), - crate_name: config.folder_name.clone(), event_files: config.flowy_config.event_files.clone(), } } @@ -117,10 +152,6 @@ pub fn ast_to_event_render_ctx(ast: &[EventASTContext]) -> Vec, pub output_deserializer: Option, @@ -27,9 +22,6 @@ impl EventTemplate { } pub fn render(&mut self, ctx: EventRenderContext, index: usize) -> Option { - if index == 0 { - self.tera_context.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); diff --git a/shared-lib/lib-infra/src/code_gen/dart_event/event_template.tera b/shared-lib/lib-infra/src/code_gen/dart_event/event_template.tera index aac3012fb6..445807ea33 100644 --- a/shared-lib/lib-infra/src/code_gen/dart_event/event_template.tera +++ b/shared-lib/lib-infra/src/code_gen/dart_event/event_template.tera @@ -1,7 +1,3 @@ -{%- if index == 0 %} -{{ imported_dart_files }} -{%- endif -%} - class {{ event_class }} { {%- if has_input %} {{ input_deserializer }} request; diff --git a/shared-lib/lib-infra/src/code_gen/mod.rs b/shared-lib/lib-infra/src/code_gen/mod.rs index 32570614cb..2e8f026fde 100644 --- a/shared-lib/lib-infra/src/code_gen/mod.rs +++ b/shared-lib/lib-infra/src/code_gen/mod.rs @@ -8,4 +8,4 @@ pub mod dart_event; mod flowy_toml; #[cfg(any(feature = "pb_gen", feature = "dart_event"))] -mod util; +pub mod util; diff --git a/shared-lib/lib-infra/src/code_gen/protobuf_file/mod.rs b/shared-lib/lib-infra/src/code_gen/protobuf_file/mod.rs index 083bea4949..25115c81bc 100644 --- a/shared-lib/lib-infra/src/code_gen/protobuf_file/mod.rs +++ b/shared-lib/lib-infra/src/code_gen/protobuf_file/mod.rs @@ -22,7 +22,7 @@ pub fn gen(crate_name: &str, proto_file_dir: &str) { #[cfg(feature = "proto_gen")] let _ = gen_protos(crate_name); - let mut paths = vec![]; + let mut proto_file_paths = vec![]; let mut file_names = vec![]; for (path, file_name) in WalkDir::new(proto_file_dir) @@ -37,26 +37,31 @@ pub fn gen(crate_name: &str, proto_file_dir: &str) { if path.ends_with(".proto") { // https://stackoverflow.com/questions/49077147/how-can-i-force-build-rs-to-run-again-without-cleaning-my-whole-project println!("cargo:rerun-if-changed={}", path); - paths.push(path); + proto_file_paths.push(path); file_names.push(file_name); } } - println!("cargo:rerun-if-changed=build.rs"); let protoc_bin_path = protoc_bin_vendored::protoc_bin_path().unwrap(); // 2. generate the protobuf files(Dart) #[cfg(feature = "dart")] - generate_dart_protobuf_files(crate_name, proto_file_dir, &paths, &file_names, &protoc_bin_path); + generate_dart_protobuf_files( + crate_name, + proto_file_dir, + &proto_file_paths, + &file_names, + &protoc_bin_path, + ); // 3. generate the protobuf files(Rust) - generate_rust_protobuf_files(&protoc_bin_path, &paths, proto_file_dir); + generate_rust_protobuf_files(&protoc_bin_path, &proto_file_paths, proto_file_dir); } -fn generate_rust_protobuf_files(protoc_bin_path: &PathBuf, input_paths: &Vec, proto_file_dir: &str) { +fn generate_rust_protobuf_files(protoc_bin_path: &PathBuf, proto_file_paths: &Vec, proto_file_dir: &str) { protoc_rust::Codegen::new() .out_dir("./src/protobuf/model") .protoc_path(protoc_bin_path) - .inputs(input_paths) + .inputs(proto_file_paths) .include(proto_file_dir) .run() .expect("Running protoc failed."); @@ -68,7 +73,7 @@ fn generate_dart_protobuf_files( root: &str, paths: &Vec, file_names: &Vec, - proto_path: &PathBuf, + protoc_bin_path: &PathBuf, ) { if std::env::var("CARGO_MAKE_WORKING_DIRECTORY").is_err() { log::warn!("CARGO_MAKE_WORKING_DIRECTORY was not set, skip generate dart pb"); @@ -82,15 +87,15 @@ fn generate_dart_protobuf_files( let workspace_dir = std::env::var("CARGO_MAKE_WORKING_DIRECTORY").unwrap(); let flutter_sdk_path = std::env::var("FLUTTER_FLOWY_SDK_PATH").unwrap(); - let output = format!("{}/{}/{}", workspace_dir, flutter_sdk_path, name); + let output = format!("{}/{}/lib/protobuf/{}", workspace_dir, flutter_sdk_path, name); if !std::path::Path::new(&output).exists() { std::fs::create_dir_all(&output).unwrap(); } check_pb_dart_plugin(); - let proto_path = proto_path.to_str().unwrap().to_owned(); + let protoc_bin_path = protoc_bin_path.to_str().unwrap().to_owned(); paths.iter().for_each(|path| { if cmd_lib::run_cmd! { - ${proto_path} --dart_out=${output} --proto_path=${root} ${path} + ${protoc_bin_path} --dart_out=${output} --proto_path=${root} ${path} } .is_err() {