sqlcx_core/generator/
mod.rs1pub 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}