Skip to main content

gproxy_protocol/claude/common/
container.rs

1use serde::{Deserialize, Serialize};
2
3use super::SkillType;
4
5#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
6#[serde(untagged)]
7#[non_exhaustive]
8pub enum ContainerParam {
9    Params(ContainerParams),
10    Id(String),
11    Raw(serde_json::Value),
12}
13
14#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
15#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
16pub struct ContainerParams {
17    #[serde(skip_serializing_if = "Option::is_none")]
18    pub id: Option<String>,
19    #[serde(skip_serializing_if = "Option::is_none")]
20    pub skills: Option<Vec<SkillParam>>,
21    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
22    pub rest: serde_json::Map<String, serde_json::Value>,
23}
24
25#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
26#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
27pub struct SkillParam {
28    pub skill_id: String,
29    #[serde(rename = "type")]
30    pub type_: SkillType,
31    #[serde(skip_serializing_if = "Option::is_none")]
32    pub version: Option<String>,
33    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
34    pub rest: serde_json::Map<String, serde_json::Value>,
35}
36
37#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
38#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
39pub struct Container {
40    pub id: String,
41    pub expires_at: String,
42    pub skills: Vec<Skill>,
43    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
44    pub rest: serde_json::Map<String, serde_json::Value>,
45}
46
47#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
48#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
49pub struct Skill {
50    pub skill_id: String,
51    #[serde(rename = "type")]
52    pub type_: SkillType,
53    pub version: String,
54    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
55    pub rest: serde_json::Map<String, serde_json::Value>,
56}