1use serde::{Deserialize, Serialize};
4use std::collections::HashMap;
5
6#[derive(Debug, Clone, Deserialize)]
8pub struct DockerInfo {
9 #[serde(rename = "Name")]
11 pub name: String,
12 #[serde(rename = "ServerVersion")]
14 pub server_version: String,
15 #[serde(rename = "OperatingSystem")]
17 pub operating_system: String,
18 #[serde(rename = "Architecture")]
20 pub architecture: String,
21}
22
23#[derive(Debug, Clone, Deserialize)]
25pub struct ImageInspect {
26 #[serde(rename = "Id")]
28 pub id: String,
29 #[serde(rename = "RepoTags", default)]
31 pub repo_tags: Vec<String>,
32 #[serde(rename = "RepoDigests", default)]
34 pub repo_digests: Vec<String>,
35}
36
37#[derive(Debug, Clone, Deserialize)]
39pub struct VolumeInspect {
40 #[serde(rename = "Name")]
42 pub name: String,
43 #[serde(rename = "Driver")]
45 pub driver: String,
46 #[serde(rename = "Labels", default)]
48 pub labels: Option<HashMap<String, String>>,
49 #[serde(rename = "Options", default)]
51 pub options: Option<HashMap<String, String>>,
52}
53
54#[derive(Debug, Clone, Deserialize)]
56pub struct NetworkInspect {
57 #[serde(rename = "Name")]
59 pub name: String,
60 #[serde(rename = "Id")]
62 pub id: String,
63 #[serde(rename = "Driver")]
65 pub driver: String,
66 #[serde(rename = "Internal", default)]
68 pub internal: bool,
69 #[serde(rename = "EnableIPv6", default)]
71 pub enable_ipv6: bool,
72 #[serde(rename = "Attachable", default)]
74 pub attachable: bool,
75 #[serde(rename = "Labels", default)]
77 pub labels: Option<HashMap<String, String>>,
78 #[serde(rename = "Options", default)]
80 pub options: Option<HashMap<String, String>>,
81 #[serde(rename = "IPAM", default)]
83 pub ipam: NetworkIpam,
84}
85
86#[derive(Debug, Clone, Default, Deserialize)]
88pub struct NetworkIpam {
89 #[serde(rename = "Driver", default)]
91 pub driver: String,
92 #[serde(rename = "Config", default)]
94 pub config: Vec<NetworkIpamConfig>,
95}
96
97#[derive(Debug, Clone, Default, Deserialize, Serialize, PartialEq)]
99pub struct NetworkIpamConfig {
100 #[serde(rename = "Subnet", default)]
102 pub subnet: String,
103 #[serde(rename = "Gateway", default)]
105 pub gateway: String,
106 #[serde(rename = "IPRange", default)]
108 pub ip_range: String,
109}
110
111#[derive(Debug, Clone, Deserialize)]
113pub struct ContainerInspect {
114 #[serde(rename = "Id")]
116 pub id: String,
117 #[serde(rename = "Name")]
119 pub name: String,
120 #[serde(rename = "Image")]
122 pub image: String,
123 #[serde(rename = "State")]
125 pub state: ContainerState,
126 #[serde(rename = "Config")]
128 pub config: ContainerConfig,
129 #[serde(rename = "HostConfig")]
131 pub host_config: HostConfig,
132 #[serde(rename = "NetworkSettings")]
134 pub network_settings: NetworkSettings,
135 #[serde(rename = "Mounts", default)]
137 pub mounts: Vec<MountPoint>,
138}
139
140#[derive(Debug, Clone, Deserialize)]
142pub struct ContainerState {
143 #[serde(rename = "Status")]
145 pub status: String,
146 #[serde(rename = "Running", default)]
148 pub running: bool,
149}
150
151#[derive(Debug, Clone, Default, Deserialize)]
153pub struct ContainerConfig {
154 #[serde(rename = "Hostname", default)]
156 pub hostname: String,
157 #[serde(rename = "Domainname", default)]
159 pub domainname: String,
160 #[serde(rename = "User", default)]
162 pub user: String,
163 #[serde(rename = "Env", default)]
165 pub env: Option<Vec<String>>,
166 #[serde(rename = "Cmd", default)]
168 pub cmd: Option<Vec<String>>,
169 #[serde(rename = "Image", default)]
171 pub image: String,
172 #[serde(rename = "WorkingDir", default)]
174 pub working_dir: String,
175 #[serde(rename = "Entrypoint", default)]
177 pub entrypoint: Option<Vec<String>>,
178 #[serde(rename = "Labels", default)]
180 pub labels: Option<HashMap<String, String>>,
181 #[serde(rename = "Tty", default)]
183 pub tty: bool,
184 #[serde(rename = "OpenStdin", default)]
186 pub open_stdin: bool,
187 #[serde(rename = "ExposedPorts", default)]
189 pub exposed_ports: Option<HashMap<String, serde_json::Value>>,
190}
191
192#[derive(Debug, Clone, Default, Deserialize)]
194pub struct HostConfig {
195 #[serde(rename = "PortBindings", default)]
197 pub port_bindings: Option<HashMap<String, Option<Vec<PortBinding>>>>,
198 #[serde(rename = "RestartPolicy", default)]
200 pub restart_policy: Option<RestartPolicy>,
201 #[serde(rename = "Privileged", default)]
203 pub privileged: bool,
204 #[serde(rename = "ReadonlyRootfs", default)]
206 pub readonly_rootfs: bool,
207 #[serde(rename = "ExtraHosts", default)]
209 pub extra_hosts: Option<Vec<String>>,
210 #[serde(rename = "AutoRemove", default)]
212 pub auto_remove: bool,
213}
214
215#[derive(Debug, Clone, Default, Deserialize)]
217pub struct RestartPolicy {
218 #[serde(rename = "Name", default)]
220 pub name: String,
221 #[serde(rename = "MaximumRetryCount", default)]
223 pub maximum_retry_count: i64,
224}
225
226#[derive(Debug, Clone, Default, Deserialize)]
228pub struct NetworkSettings {
229 #[serde(rename = "Networks", default)]
231 pub networks: HashMap<String, EndpointSettings>,
232}
233
234#[derive(Debug, Clone, Default, Deserialize)]
236pub struct EndpointSettings {
237 #[serde(rename = "Aliases", default)]
239 pub aliases: Option<Vec<String>>,
240}
241
242#[derive(Debug, Clone, Deserialize)]
244pub struct MountPoint {
245 #[serde(rename = "Type")]
247 pub mount_type: String,
248 #[serde(rename = "Name", default)]
250 pub name: String,
251 #[serde(rename = "Source", default)]
253 pub source: String,
254 #[serde(rename = "Destination")]
256 pub destination: String,
257 #[serde(rename = "Mode", default)]
259 pub mode: String,
260 #[serde(rename = "RW", default)]
262 pub rw: bool,
263}
264
265#[derive(Debug, Clone, Deserialize)]
267pub struct PortBinding {
268 #[serde(rename = "HostIp", default)]
270 pub host_ip: String,
271 #[serde(rename = "HostPort", default)]
273 pub host_port: String,
274}