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;
17pub use config::config::{Config, MetaConfig};
18pub use dumper::internal_config::ConfigDumpContent;
19use log::debug;
20
21pub fn generate(config: Config, meta_config: MetaConfig) -> anyhow::Result<()> {
23 debug!("config={config:?} meta_config={meta_config:?}");
24
25 let internal_config = InternalConfig::parse(&config, &meta_config)?;
26 debug!("internal_config={internal_config:?}");
27
28 let dumper = Dumper::new(&internal_config.dumper);
29 dumper
30 .with_content(ContentConfig)
31 .dump("config.json", &config)?;
32
33 controller::run(&internal_config.controller, &|| {
34 generate_once(&internal_config, &dumper)
35 })?;
36
37 Ok(())
38}
39
40fn generate_once(internal_config: &InternalConfig, dumper: &Dumper) -> anyhow::Result<()> {
41 let progress_bar_pack = GeneratorProgressBarPack::new();
42
43 dumper
44 .with_content(ContentConfig)
45 .dump("internal_config.json", &internal_config)?;
46
47 preparer::prepare(&internal_config.preparer)?;
48
49 let pb = progress_bar_pack.parse.start();
50 let mir_pack = parser::parse(&internal_config.parser, dumper, &progress_bar_pack)?;
51 drop(pb);
52
53 let pb = progress_bar_pack.generate.start();
54 let generator_output = generator::generate(
55 &mir_pack,
56 &internal_config.generator,
57 dumper,
58 &progress_bar_pack,
59 )?;
60 drop(pb);
61
62 generator_output.output_texts.write_to_disk()?;
63
64 let pb = progress_bar_pack.polish.start();
65 polisher::polish(
66 &internal_config.polisher,
67 generator_output.dart_needs_freezed,
68 generator_output.dart_needs_json_serializable,
69 &generator_output.output_texts.paths(),
70 &progress_bar_pack,
71 )?;
72 drop(pb);
73
74 println!("Done!");
75
76 Ok(())
77}