Skip to main content

gproxy_protocol/protocol/claude/common/
container.rs

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