use crate::utils::to_pascal_case;
pub(crate) fn pascal_triplet(name: &str) -> (String, String, String) {
let pascal = to_pascal_case(name);
(name.to_string(), pascal.clone(), pascal)
}
pub(crate) fn timestamped_type_template(name: &str, kind: &str) -> String {
let pascal = to_pascal_case(name);
let kind_lower = kind.to_lowercase();
format!(
r#"//! {name} {kind} Type
//!
//! Auto-generated {kind_lower} definition.
use serde::{{Deserialize, Serialize}};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct {pascal} {{
pub timestamp: f64,
// TODO: Add {kind_lower} fields
}}
impl {pascal} {{
pub fn new() -> Self {{
Self {{
timestamp: std::time::SystemTime::now()
.duration_since(std::time::UNIX_EPOCH)
.unwrap()
.as_secs_f64(),
}}
}}
}}
impl Default for {pascal} {{
fn default() -> Self {{
Self::new()
}}
}}
"#,
)
}