mod delegates;
mod shape;
mod validate;
use crate::generators::tetherscript::model::Model;
pub fn render(model: &Model) -> String {
let mut file = header(model);
file.push_str(&imports());
file.push_str(&constants(model));
file.push_str(&shape::columns(model));
file.push_str(&shape::new(model));
file.push_str(&validate::render(model));
file.push_str(&delegates::render(model));
file.push_str(&delegates::exports(model));
file
}
fn header(model: &Model) -> String {
format!(
"// Model for the `{}` table.\n\
//\n\
// Generated by `rustyroad pull`. A row is a map keyed by column name, so\n\
// there is no type to declare; `validate` is what a struct's field types\n\
// would otherwise have enforced, and it runs before every write.\n\n",
model.table
)
}
fn imports() -> String {
"import \"./create.tether\" as create_mod\n\
import \"./read.tether\" as read_mod\n\
import \"./update.tether\" as update_mod\n\
import \"./delete.tether\" as delete_mod\n\n"
.to_string()
}
fn constants(model: &Model) -> String {
format!(
"let TABLE = \"{}\"\nlet MODEL = \"{}\"\n\n",
model.table, model.name
)
}