Skip to main content

typesafe_rs/types/
models.rs

1use serde::Deserialize;
2
3/// Metadata for an available model.
4#[derive(Clone, Debug, PartialEq, Eq, Deserialize)]
5pub struct ModelCard {
6    /// Model identifier, e.g. `jev-latest`.
7    pub name: String,
8    /// Human-readable description.
9    pub description: String,
10    /// Release date as returned by the API.
11    pub release_date: String,
12}
13
14/// Wire body for `GET /v1/models`.
15#[derive(Clone, Debug, PartialEq, Eq, Deserialize)]
16pub struct ListModelsResponse {
17    /// Available models.
18    pub models: Vec<ModelCard>,
19}
20
21#[cfg(test)]
22mod tests {
23    use super::*;
24    use serde_json::json;
25
26    #[test]
27    fn deserializes_models_array() {
28        let body = json!({
29            "models": [
30                {
31                    "name": "jev-latest",
32                    "description": "Flagship",
33                    "release_date": "2026-01-01"
34                }
35            ]
36        });
37        let parsed: ListModelsResponse = serde_json::from_value(body).unwrap();
38        assert_eq!(parsed.models[0].name, "jev-latest");
39    }
40}