use serde::{Deserialize, Serialize};
use time::OffsetDateTime;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct ModelInfo {
pub id: String,
#[serde(rename = "created_at", with = "time::serde::rfc3339")]
pub created_at: OffsetDateTime,
#[serde(rename = "display_name")]
pub display_name: String,
#[serde(rename = "type")]
pub r#type: ModelType,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum ModelType {
Model,
}
#[cfg(test)]
mod tests {
use super::*;
use time::macros::datetime;
#[test]
fn test_model_info_serialization() {
let model_info = ModelInfo {
id: "claude-3-7-sonnet-20250219".to_string(),
created_at: datetime!(2025-02-19 0:00:00 UTC),
display_name: "Claude 3.7 Sonnet".to_string(),
r#type: ModelType::Model,
};
let json = serde_json::to_string(&model_info).unwrap();
let expected = r#"{"id":"claude-3-7-sonnet-20250219","created_at":"2025-02-19T00:00:00Z","display_name":"Claude 3.7 Sonnet","type":"model"}"#;
assert_eq!(json, expected);
}
#[test]
fn test_model_info_deserialization() {
let json = r#"{"id":"claude-3-7-sonnet-20250219","created_at":"2025-02-19T00:00:00Z","display_name":"Claude 3.7 Sonnet","type":"model"}"#;
let model_info: ModelInfo = serde_json::from_str(json).unwrap();
assert_eq!(model_info.id, "claude-3-7-sonnet-20250219");
assert_eq!(model_info.created_at, datetime!(2025-02-19 0:00:00 UTC));
assert_eq!(model_info.display_name, "Claude 3.7 Sonnet");
assert_eq!(model_info.r#type, ModelType::Model);
}
}