use crate::generators::rust::model::Field;
use crate::generators::rust::render::root::fields::{inner_type, is_timestamp};
const OFFSET_AWARE: &str = "chrono::DateTime<chrono::Utc>";
const NAIVE: &str = "chrono::NaiveDateTime";
pub(super) fn value(field: &Field) -> String {
if is_timestamp(field) {
if let Some(seed) = clock(field) {
return if field.nullable {
format!("Some({seed})")
} else {
seed.to_string()
};
}
}
if field.nullable {
return "None".to_string();
}
zero(&field.mapping.rust)
}
fn clock(field: &Field) -> Option<&'static str> {
let inner = inner_type(&field.mapping.rust);
if inner == OFFSET_AWARE {
return Some("Utc::now()");
}
if inner == NAIVE {
return Some("Utc::now().naive_utc()");
}
None
}
fn zero(rust: &str) -> String {
if rust.starts_with("Vec<") {
return "vec![]".to_string();
}
match rust {
"bool" => "false".to_string(),
"i16" | "i32" | "i64" => "0".to_string(),
"f32" | "f64" => "0.0".to_string(),
"String" => "\"\".to_string()".to_string(),
"serde_json::Value" => "serde_json::json!({})".to_string(),
"chrono::NaiveDateTime" | "chrono::NaiveDate" | "chrono::NaiveTime" => {
format!("{rust}::default()")
}
_ => "Default::default()".to_string(),
}
}