use super::super::naming::pascal;
use super::{fields, inputs};
use crate::database::introspection::Table;
pub(super) struct Patch {
pub parameter: String,
pub changed: String,
pub assignments: String,
}
pub(super) fn render(table: &Table, binding: &str) -> Patch {
let columns = inputs::patch_columns(table);
let model = pascal(&table.name);
let parameter = if columns.is_empty() {
format!("Patch{model} {{}}: Patch{model}")
} else {
format!("{binding}: Patch{model}")
};
let changed = if columns.is_empty() {
"false".to_string()
} else {
inputs::present_from(&columns, binding)
};
let assignments = columns.iter()
.map(|column| fields::assignment_from(column, binding))
.collect::<Vec<_>>().join("\n");
Patch { parameter, changed, assignments }
}