pub mod client;
pub mod schema;
pub mod types;
use anyhow::Result;
use serde::{Deserialize, Serialize};
use std::fs;
use std::path::PathBuf;
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "kebab-case")]
pub enum ClientMode {
Full,
FunctorOnly,
None,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "kebab-case")]
pub enum VariantMode {
Polymorphic,
Standard,
}
pub struct Config {
pub output_dir: PathBuf,
pub module_prefix: String,
pub generate_schema: bool,
pub generate_client: bool,
pub unified_module: bool,
pub client_mode: ClientMode,
pub variant_mode: VariantMode,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ProjectConfig {
pub input: Option<PathBuf>,
pub output: Option<PathBuf>,
pub module: Option<String>,
pub with_schema: Option<bool>,
pub with_client: Option<bool>,
pub unified: Option<bool>,
pub client_mode: Option<ClientMode>,
pub variant_mode: Option<VariantMode>,
}
impl ProjectConfig {
pub fn load(path: &std::path::Path) -> Result<Self> {
let content = fs::read_to_string(path)?;
let config: Self = toml::from_str(&content)?;
Ok(config)
}
}