Skip to main content

sqlcx_core/generator/
mod.rs

1pub mod go;
2pub mod python;
3pub mod rust_lang;
4pub mod typescript;
5
6use crate::config::TargetConfig;
7use crate::error::Result;
8use crate::ir::{Overrides, SqlcxIR};
9
10pub struct GeneratedFile {
11    pub path: String,
12    pub content: String,
13}
14
15pub trait SchemaGenerator {
16    fn generate(&self, ir: &SqlcxIR, overrides: &Overrides) -> Result<GeneratedFile>;
17}
18
19pub trait DriverGenerator {
20    fn generate(&self, ir: &SqlcxIR) -> Result<Vec<GeneratedFile>>;
21}
22
23pub trait LanguagePlugin {
24    fn generate(&self, ir: &SqlcxIR, config: &TargetConfig) -> Result<Vec<GeneratedFile>>;
25}
26
27pub fn resolve_language(name: &str, schema: &str, driver: &str) -> Result<Box<dyn LanguagePlugin>> {
28    match name {
29        "typescript" => Ok(Box::new(typescript::TypeScriptPlugin::new(schema, driver)?)),
30        "go" => Ok(Box::new(go::GoPlugin::new(schema, driver)?)),
31        "rust" => Ok(Box::new(rust_lang::RustPlugin::new(schema, driver)?)),
32        "python" => Ok(Box::new(python::PythonPlugin::new(schema, driver)?)),
33        _ => Err(crate::error::SqlcxError::UnknownLanguage(name.to_string())),
34    }
35}