lib_flutter_rust_bridge_codegen/library/codegen/
mod.rs1pub(crate) mod config;
4mod controller;
5pub(crate) mod dumper;
6pub(crate) mod generator;
7pub(crate) mod ir;
8mod misc;
9pub(crate) mod parser;
10mod polisher;
11mod preparer;
12
13use crate::codegen::config::internal_config::InternalConfig;
14use crate::codegen::dumper::internal_config::ConfigDumpContent::Config as ContentConfig;
15use crate::codegen::dumper::Dumper;
16use crate::codegen::misc::GeneratorProgressBarPack;
17use crate::misc::FvmInstallMode;
18pub use config::config::{Config, MetaConfig};
19pub use dumper::internal_config::ConfigDumpContent;
20pub use ir::mir::ty::rust_opaque::RustOpaqueCodecMode;
21use log::debug;
22
23pub fn generate(config: Config, meta_config: MetaConfig) -> anyhow::Result<()> {
25 generate_with_fvm_install_mode(config, meta_config, FvmInstallMode::Normal)
29 }
31
32pub fn generate_with_fvm_install_mode(
34 config: Config,
35 meta_config: MetaConfig,
36 fvm_install_mode: FvmInstallMode,
37) -> anyhow::Result<()> {
38 debug!("config={config:?} meta_config={meta_config:?}");
39
40 let mut internal_config = InternalConfig::parse(&config, &meta_config)?;
41 internal_config.polisher.fvm_install_mode = fvm_install_mode;
42 debug!("internal_config={internal_config:?}");
43
44 let dumper = Dumper::new(&internal_config.dumper);
45 dumper
46 .with_content(ContentConfig)
47 .dump("config.json", &config)?;
48
49 controller::run(&internal_config.controller, &|| {
50 generate_once(&internal_config, &dumper)
51 })?;
52
53 Ok(())
54}
55
56fn generate_once(internal_config: &InternalConfig, dumper: &Dumper) -> anyhow::Result<()> {
57 let progress_bar_pack = GeneratorProgressBarPack::new();
58
59 dumper
60 .with_content(ContentConfig)
61 .dump("internal_config.json", &internal_config)?;
62
63 preparer::prepare(&internal_config.preparer)?;
64
65 let pb = progress_bar_pack.parse.start();
66 let mir_pack = parser::parse(&internal_config.parser, dumper, &progress_bar_pack)?;
67 drop(pb);
68
69 let pb = progress_bar_pack.generate.start();
70 let generator_output = generator::generate(
71 &mir_pack,
72 &internal_config.generator,
73 dumper,
74 &progress_bar_pack,
75 )?;
76 drop(pb);
77
78 generator_output.output_texts.write_to_disk()?;
79
80 let pb = progress_bar_pack.polish.start();
81 polisher::polish(
82 &internal_config.polisher,
83 generator_output.dart_needs_freezed,
84 generator_output.dart_needs_json_serializable,
85 &generator_output.output_texts.paths(),
86 &progress_bar_pack,
87 )?;
88 drop(pb);
89
90 println!("Done!");
91
92 Ok(())
93}