use super::CodegenConfig;
use crate::codegen::string_format::attribute::code_attribute;
use crate::codegen::string_format::code_data_concept;
use crate::codegen::string_format::tao::code_tao;
use crate::codegen::string_format::{
code_form, AttributeFormatConfig, DataFormatConfig, FormatConfig,
};
use crate::tao::ImplementConfig;
use std::collections::HashMap;
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct StructConfig {
pub name: String,
pub import: String,
}
impl Default for StructConfig {
fn default() -> Self {
Self {
name: "Tao".to_owned(),
import: "zamm_yin::tao::Tao".to_owned(),
}
}
}
#[derive(Default)]
pub struct CodeConfig<'a> {
pub target: StructConfig,
pub form: StructConfig,
pub parent: StructConfig,
pub activate_root_node: bool,
pub activate_attribute: bool,
pub activate_data: bool,
pub all_attributes: Vec<StructConfig>,
pub introduced_attributes: Vec<StructConfig>,
pub attribute_structs: HashMap<&'a str, StructConfig>,
pub rust_primitive_name: String,
pub default_value: String,
pub impl_cfg: ImplementConfig,
pub codegen_cfg: CodegenConfig,
}
pub fn code(cfg: &CodeConfig) -> String {
if cfg.activate_root_node {
code_tao(&FormatConfig::from(cfg))
} else if cfg.activate_attribute {
code_attribute(&AttributeFormatConfig::from(cfg))
} else if cfg.activate_data {
code_data_concept(&DataFormatConfig::from(cfg))
} else {
code_form(&FormatConfig::from(cfg))
}
}