Skip to main content

forge_codegen/dioxus/
mod.rs

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