teo-generator 0.3.9

SDK generators for Teo
Documentation
use askama::Template;
use inflector::Inflector;
use itertools::Itertools;
use teo_runtime::namespace::Namespace;
use teo_runtime::traits::named::Named;
use crate::utils::file::FileUtil;

struct AccountModelField {
    name: String
}

struct AccountModel {
    name: String,
    name_lowercase: String,
    id_fields: Vec<AccountModelField>,
    checker_fields: Vec<AccountModelField>,
}

#[derive(Template)]
#[template(path = "admin/src/lib/generated/signIn/keys.ts.jinja", escape = "none")]
pub(self) struct SignInKeysTsTemplate {
    pub(self) account_models: Vec<AccountModel>,
}

fn fetch_template_data(namespace: &Namespace) -> SignInKeysTsTemplate {
    SignInKeysTsTemplate {
        account_models: namespace.collect_models(|m| m.data().get("admin:administrator").is_some()).iter().map(|m| {
            AccountModel {
                name: m.path().join("."),
                name_lowercase: m.path().iter().map(|s| s.to_camel_case()).join("."),
                id_fields: m.fields().values().filter(|f| f.data().get("identity:id").is_some()).map(|f| {
                    AccountModelField {
                        name: f.name().to_string()
                    }
                }).collect(),
                checker_fields: m.fields().values().filter(|f| f.data().get("identity:checker").is_some()).map(|f| {
                    AccountModelField {
                        name: f.name().to_string()
                    }
                }).collect(),
            }
        }).collect()
    }
}

pub(crate) async fn generate_sign_in_keys_ts(namespace: &Namespace, file_util: &FileUtil) -> teo_result::Result<()> {
    let template = fetch_template_data(namespace);
    file_util.ensure_directory_and_generate_file("src/lib/generated/signIn/keys.ts", template.render().unwrap()).await?;
    Ok(())
}