Skip to main content

forge_codegen/dioxus/
mod.rs

1mod 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}