1use serde::{Deserialize, Serialize};
11
12#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
14pub struct ModelInfo {
15 pub name: String,
17 pub description: String,
19 pub release_date: String,
21}
22
23#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
25pub struct ModelsResponse {
26 pub models: Vec<ModelInfo>,
28}
29
30impl ModelsResponse {
31 pub fn new(models: Vec<ModelInfo>) -> Self {
33 Self { models }
34 }
35}
36
37#[cfg(test)]
38mod tests {
39 use super::*;
40
41 #[test]
42 fn serializes_to_jev_shape() {
43 let resp = ModelsResponse::new(vec![ModelInfo {
44 name: "mock".into(),
45 description: "A mock engine for testing".into(),
46 release_date: "2026-01-01".into(),
47 }]);
48 let v: serde_json::Value = serde_json::to_value(&resp).unwrap();
49 assert_eq!(v["models"][0]["name"], "mock");
50 assert_eq!(v["models"][0]["description"], "A mock engine for testing");
51 assert_eq!(v["models"][0]["release_date"], "2026-01-01");
52 assert!(v.get("data").is_none());
53 assert!(v.get("object").is_none());
54 }
55}