gproxy_protocol/protocol/claude/common/
container.rs1use 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}