forge_codegen/dioxus/
mod.rs1mod api;
2mod types;
3
4pub use api::ApiGenerator;
5pub use types::TypeGenerator;
6
7use std::path::PathBuf;
8
9use forge_core::schema::SchemaRegistry;
10
11use crate::Error;
12
13pub struct DioxusGenerator {
14 output_dir: PathBuf,
15 type_gen: TypeGenerator,
16 api_gen: ApiGenerator,
17}
18
19impl DioxusGenerator {
20 pub fn new(output_dir: impl Into<PathBuf>) -> Self {
21 let output_dir = output_dir.into();
22 Self {
23 output_dir: output_dir.clone(),
24 type_gen: TypeGenerator::new(),
25 api_gen: ApiGenerator::new(),
26 }
27 }
28
29 pub fn generate(&self, registry: &SchemaRegistry) -> Result<(), Error> {
30 std::fs::create_dir_all(&self.output_dir)?;
31 std::fs::write(
32 self.output_dir.join("types.rs"),
33 self.type_gen.generate(registry)?,
34 )?;
35 std::fs::write(
36 self.output_dir.join("api.rs"),
37 self.api_gen.generate(registry)?,
38 )?;
39 std::fs::write(self.output_dir.join("mod.rs"), self.generate_mod())?;
40 Ok(())
41 }
42
43 fn generate_mod(&self) -> String {
44 r#"// Auto-generated by FORGE - DO NOT EDIT
45
46#![allow(dead_code, unused_imports)]
47
48pub mod api;
49pub mod types;
50
51pub use api::*;
52pub use forge_dioxus::{
53 ConnectionState, ForgeClient, ForgeClientConfig, ForgeClientError, ForgeError,
54 ForgeProvider, ForgeUpload, JobExecutionState, QueryState, SubscriptionHandle,
55 SubscriptionState, WorkflowExecutionState, use_connection_state, use_forge_client,
56 use_forge_job, use_forge_query, use_forge_subscription, use_forge_workflow,
57};
58pub use types::*;
59"#
60 .to_string()
61 }
62}