sqlcx-core 0.2.1

SQL-first cross-language type-safe code generator — core library
Documentation
pub mod go;
pub mod python;
pub mod rust_lang;
pub mod typescript;

use crate::config::TargetConfig;
use crate::error::Result;
use crate::ir::{Overrides, SqlcxIR};

pub struct GeneratedFile {
    pub path: String,
    pub content: String,
}

pub trait SchemaGenerator {
    fn generate(&self, ir: &SqlcxIR, overrides: &Overrides) -> Result<GeneratedFile>;
}

pub trait DriverGenerator {
    fn generate(&self, ir: &SqlcxIR) -> Result<Vec<GeneratedFile>>;
}

pub trait LanguagePlugin {
    fn generate(&self, ir: &SqlcxIR, config: &TargetConfig) -> Result<Vec<GeneratedFile>>;
}

pub fn resolve_language(name: &str, schema: &str, driver: &str) -> Result<Box<dyn LanguagePlugin>> {
    match name {
        "typescript" => Ok(Box::new(typescript::TypeScriptPlugin::new(schema, driver)?)),
        "go" => Ok(Box::new(go::GoPlugin::new(schema, driver)?)),
        "rust" => Ok(Box::new(rust_lang::RustPlugin::new(schema, driver)?)),
        "python" => Ok(Box::new(python::PythonPlugin::new(schema, driver)?)),
        _ => Err(crate::error::SqlcxError::UnknownLanguage(name.to_string())),
    }
}