Skip to main content

forge_codegen/dioxus/
mod.rs

1//! Dioxus (Rust frontend) code generation.
2
3mod api;
4mod types;
5
6use std::path::PathBuf;
7
8use forge_core::schema::SchemaRegistry;
9
10use crate::Error;
11use crate::binding::BindingSet;
12
13pub struct DioxusGenerator {
14    output_dir: PathBuf,
15}
16
17impl DioxusGenerator {
18    pub fn new(output_dir: impl Into<PathBuf>) -> Self {
19        Self {
20            output_dir: output_dir.into(),
21        }
22    }
23
24    pub fn generate(&self, registry: &SchemaRegistry) -> Result<(), Error> {
25        std::fs::create_dir_all(&self.output_dir)?;
26
27        let bindings = BindingSet::from_registry(registry);
28
29        std::fs::write(self.output_dir.join("types.rs"), types::generate(registry)?)?;
30        std::fs::write(self.output_dir.join("api.rs"), api::generate(&bindings)?)?;
31        std::fs::write(self.output_dir.join("mod.rs"), Self::mod_content())?;
32
33        Ok(())
34    }
35
36    fn mod_content() -> &'static str {
37        r#"// Auto-generated by FORGE - DO NOT EDIT
38
39#![allow(dead_code, unused_imports)]
40
41pub mod api;
42pub mod types;
43
44pub use api::*;
45pub use forge_dioxus::{
46    ConnectionState, ForgeAuth, ForgeAuthProvider, ForgeClient, ForgeClientConfig,
47    ForgeClientError, ForgeError, ForgeProvider, ForgeUpload, JobExecutionState, Mutation,
48    QueryState, SubscriptionHandle, SubscriptionState, TokenPair, WorkflowExecutionState,
49    use_auth_key, use_connection_state, use_forge_auth, use_forge_client, use_forge_job,
50    use_forge_mutation, use_forge_query, use_forge_subscription, use_forge_workflow,
51    use_require_auth, use_viewer,
52};
53pub use types::*;
54"#
55    }
56}