Skip to main content

gproxy_protocol/claude/model_list/
request.rs

1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4
5use crate::claude::types::{AnthropicBeta, AnthropicVersion, HttpMethod};
6
7/// Request descriptor for Claude "List Models" endpoint.
8#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
9pub struct ClaudeModelListRequest {
10    /// HTTP method.
11    pub method: HttpMethod,
12    /// Path parameters.
13    pub path: PathParameters,
14    /// Query parameters.
15    pub query: QueryParameters,
16    /// Request headers.
17    pub headers: RequestHeaders,
18    /// Request body (currently empty by spec).
19    pub body: RequestBody,
20}
21
22impl Default for ClaudeModelListRequest {
23    fn default() -> Self {
24        Self {
25            method: HttpMethod::Get,
26            path: PathParameters::default(),
27            query: QueryParameters::default(),
28            headers: RequestHeaders::default(),
29            body: RequestBody::default(),
30        }
31    }
32}
33
34/// List models does not define path params.
35#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
36pub struct PathParameters {}
37
38#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
39pub struct QueryParameters {
40    /// Pagination cursor: return records after this model id.
41    #[serde(default, skip_serializing_if = "Option::is_none")]
42    pub after_id: Option<String>,
43    /// Pagination cursor: return records before this model id.
44    #[serde(default, skip_serializing_if = "Option::is_none")]
45    pub before_id: Option<String>,
46    /// Number of items per page (1..=1000, default 20 by upstream API).
47    #[serde(default, skip_serializing_if = "Option::is_none")]
48    pub limit: Option<u16>,
49}
50
51#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
52pub struct RequestHeaders {
53    /// Anthropic API version.
54    #[serde(rename = "anthropic-version")]
55    pub anthropic_version: AnthropicVersion,
56    /// Optional beta version(s).
57    #[serde(
58        rename = "anthropic-beta",
59        default,
60        skip_serializing_if = "Option::is_none"
61    )]
62    pub anthropic_beta: Option<Vec<AnthropicBeta>>,
63    #[serde(flatten, default, skip_serializing_if = "BTreeMap::is_empty")]
64    pub extra: BTreeMap<String, String>,
65}
66
67/// List models request has no JSON body.
68#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
69pub struct RequestBody {}