teo-generator 0.3.9

SDK generators for Teo
Documentation
mod generators;
mod ctx;
mod generator;

use teo_result::Result;
use teo_runtime::config::entity::{Entity, Runtime};
use teo_runtime::namespace::Namespace;
use generators::*;
use crate::entity::ctx::Ctx;
use crate::entity::generator::Generator;
use crate::utils::file::FileUtil;

pub async fn generate(main_namespace: &Namespace, entity: &Entity) -> Result<()> {
    match entity.provider {
        Runtime::Rust => {
            let ctx = Ctx::new(entity, main_namespace);
            let generator = rust::gen::RustGenerator::new();
            gen(generator, &ctx).await
        }
        Runtime::Node => {
            let ctx = Ctx::new(entity, main_namespace);
            let generator = node::gen::NodeGenerator::new();
            gen(generator, &ctx).await
        }
        Runtime::Python => {
            let ctx = Ctx::new(entity, main_namespace);
            let generator = python::gen::PythonGenerator::new();
            gen(generator, &ctx).await
        }
    }?;
    std::process::exit(0);
}

async fn gen<T: Generator>(entity_generator: T, ctx: &Ctx<'_>) -> Result<()> {
    let dest = &ctx.conf.dest;
    let dest_dir = std::env::current_dir()?.join(dest);
    let generator = FileUtil::new(&dest_dir);
    generator.ensure_root_directory().await?;
    entity_generator.generate_entity_files(ctx, &generator).await?;
    Ok(())
}