use crate::generators::rust::model::Field;
pub fn indented_columns(fields: &[&Field], tabs: usize) -> String {
let indent = "\t".repeat(tabs);
fields
.iter()
.map(|field| format!("{indent}{}", quote(&field.column)))
.collect::<Vec<_>>()
.join(",\n")
}
pub fn placeholders(count: usize) -> String {
(1..=count)
.map(|index| format!("${index}"))
.collect::<Vec<_>>()
.join(", ")
}
pub fn assignments(fields: &[&Field], start: usize, tabs: usize) -> String {
let indent = "\t".repeat(tabs);
fields
.iter()
.enumerate()
.map(|(offset, field)| format!("{indent}{} = ${}", quote(&field.column), start + offset))
.collect::<Vec<_>>()
.join(",\n")
}
pub fn quote(column: &str) -> String {
let plain = !column.is_empty()
&& !column.starts_with(|c: char| c.is_ascii_digit())
&& column
.chars()
.all(|c| c.is_ascii_lowercase() || c.is_ascii_digit() || c == '_');
if plain {
return column.to_string();
}
format!("\\\"{}\\\"", column.replace('"', ""))
}