//! Rust representations of docker json structures use std::collections::HashMap; #[derive(Debug, RustcEncodable, RustcDecodable)] pub struct SearchResult { pub description: String, pub is_official: bool, pub is_trusted: bool, pub name: String, pub star_count: u64, } #[derive(Debug, RustcEncodable, RustcDecodable)] #[allow(non_snake_case)] pub struct Image { pub Created: u64, pub Id: String, pub ParentId: String, pub Labels: Option>, pub RepoTags: Vec, pub RepoDigests: Option>, pub VirtualSize: u64, } #[derive(Debug, RustcEncodable, RustcDecodable)] #[allow(non_snake_case)] pub struct ImageDetails { pub Architecture: String, pub Author: String, pub Comment: String, pub Config: Config, pub Created: String, pub DockerVersion: String, pub Id: String, pub Os: String, pub Parent: String, pub Size: u64, pub VirtualSize: u64, } #[derive(Debug, RustcEncodable, RustcDecodable)] #[allow(non_snake_case)] pub struct Container { pub Created: u64, pub Command: String, pub Id: String, pub Image: String, pub Labels: HashMap, pub Names: Vec, pub Ports: Vec, pub Status: String, pub SizeRw: Option, pub SizeRootFs: Option, } #[derive(Debug, RustcEncodable, RustcDecodable)] #[allow(non_snake_case)] pub struct ContainerDetails { pub AppArmorProfile: String, pub Args: Vec, pub Config: Config, pub Created: String, pub Driver: String, // pub ExecIDs: ?? pub HostConfig: HostConfig, pub HostnamePath: String, pub HostsPath: String, pub LogPath: String, pub Id: String, pub Image: String, pub MountLabel: String, pub NetworkSettings: NetworkSettings, pub Path: String, pub ProcessLabel: String, pub ResolvConfPath: String, pub RestartCount: u64, pub State: State, pub Mounts: Vec, } #[derive(Debug, RustcEncodable, RustcDecodable)] #[allow(non_snake_case)] pub struct Mount { pub Source: String, pub Destination: String, pub Mode: String, pub RW: bool, } #[derive(Debug, RustcEncodable, RustcDecodable)] #[allow(non_snake_case)] pub struct State { pub Error: String, pub ExitCode: u64, pub FinishedAt: String, pub OOMKilled: bool, pub Paused: bool, pub Pid: u64, pub Restarting: bool, pub Running: bool, pub StartedAt: String, } #[derive(Debug, RustcEncodable, RustcDecodable)] #[allow(non_snake_case)] pub struct NetworkSettings { pub Bridge: String, pub Gateway: String, pub IPAddress: String, pub IPPrefixLen: u64, pub MacAddress: String, /* pub PortMapping: Option, * pub Ports: Option */ } #[derive(Debug, RustcEncodable, RustcDecodable)] #[allow(non_snake_case)] pub struct HostConfig { pub CgroupParent: Option, pub ContainerIDFile: String, pub CpuShares: Option, pub CpusetCpus: Option, pub Memory: Option, pub MemorySwap: Option, pub NetworkMode: String, pub PidMode: Option, // pub PortBindings: ??? pub Privileged: bool, pub PublishAllPorts: bool, pub ReadonlyRootfs: Option, /* pub RestartPolicy: ??? * pub SecurityOpt: Option, * pub Ulimits: Option * pub VolumesFrom: Option */ } #[derive(Debug, RustcEncodable, RustcDecodable)] #[allow(non_snake_case)] pub struct Config { pub AttachStderr: bool, pub AttachStdin: bool, pub AttachStdout: bool, pub Cmd: Option>, pub Domainname: String, pub Entrypoint: Option>, pub Env: Option>, // ExposedPorts pub Hostname: String, pub Image: String, pub Labels: HashMap, // pub MacAddress: String, pub OnBuild: Option>, // pub NetworkDisabled: bool, pub OpenStdin: bool, pub StdinOnce: bool, pub Tty: bool, pub User: String, pub WorkingDir: String, } impl Config { pub fn env(&self) -> HashMap { let mut map = HashMap::new(); match self.Env { Some(ref vars) => { for e in vars { let pair: Vec<&str> = e.split("=").collect(); map.insert(pair[0].to_owned(), pair[1].to_owned()); } } _ => (), }; map } } #[derive(Debug, RustcEncodable, RustcDecodable)] #[allow(non_snake_case)] pub struct Port { pub IP: Option, pub PrivatePort: u64, pub PublicPort: Option, pub Type: String, } #[derive(Debug, RustcEncodable, RustcDecodable)] pub struct Stats { pub read: String, pub networks: HashMap, pub memory_stats: MemoryStats, pub blkio_stats: BlkioStats, pub cpu_stats: CpuStats, } #[derive(Debug, RustcEncodable, RustcDecodable)] pub struct Network { pub rx_dropped: u64, pub rx_bytes: u64, pub rx_errors: u64, pub tx_packets: u64, pub tx_dropped: u64, pub rx_packets: u64, pub tx_errors: u64, pub tx_bytes: u64, } #[derive(Debug, RustcEncodable, RustcDecodable)] pub struct MemoryStats { pub max_usage: u64, pub usage: u64, pub failcnt: Option, pub limit: u64, pub stats: MemoryStat, } #[derive(Debug, RustcEncodable, RustcDecodable)] pub struct MemoryStat { pub total_pgmajfault: u64, pub cache: u64, pub mapped_file: u64, pub total_inactive_file: u64, pub pgpgout: u64, pub rss: u64, pub total_mapped_file: u64, pub writeback: u64, pub unevictable: u64, pub pgpgin: u64, pub total_unevictable: u64, pub pgmajfault: u64, pub total_rss: u64, pub total_rss_huge: u64, pub total_writeback: u64, pub total_inactive_anon: u64, pub rss_huge: u64, pub hierarchical_memory_limit: u64, pub hierarchical_memsw_limit: u64, pub total_pgfault: u64, pub total_active_file: u64, pub active_anon: u64, pub total_active_anon: u64, pub total_pgpgout: u64, pub total_cache: u64, pub inactive_anon: u64, pub active_file: u64, pub pgfault: u64, pub inactive_file: u64, pub total_pgpgin: u64, pub swap: u64, pub total_swap: u64, } #[derive(Debug, RustcEncodable, RustcDecodable)] pub struct CpuStats { pub cpu_usage: CpuUsage, pub system_cpu_usage: u64, pub throttling_data: ThrottlingData, } #[derive(Debug, RustcEncodable, RustcDecodable)] pub struct CpuUsage { pub percpu_usage: Vec, pub usage_in_usermode: u64, pub total_usage: u64, pub usage_in_kernelmode: u64, } #[derive(Debug, RustcEncodable, RustcDecodable)] pub struct ThrottlingData { pub periods: u64, pub throttled_periods: u64, pub throttled_time: u64, } #[derive(Debug, RustcEncodable, RustcDecodable)] pub struct BlkioStats { pub io_service_bytes_recursive: Vec, pub io_serviced_recursive: Vec, pub io_queue_recursive: Vec, pub io_service_time_recursive: Vec, pub io_wait_time_recursive: Vec, pub io_merged_recursive: Vec, pub io_time_recursive: Vec, pub sectors_recursive: Vec, } #[derive(Debug, RustcEncodable, RustcDecodable)] pub struct BlkioStat { pub major: u64, pub minor: u64, pub op: String, pub value: u64, } #[derive(Debug, RustcEncodable, RustcDecodable)] #[allow(non_snake_case)] pub struct Change { pub Kind: u64, pub Path: String, } #[derive(Debug, RustcEncodable, RustcDecodable)] #[allow(non_snake_case)] pub struct Top { pub Titles: Vec, pub Processes: Vec>, } #[derive(Debug, RustcEncodable, RustcDecodable)] #[allow(non_snake_case)] pub struct Version { pub ApiVersion: String, pub Version: String, pub GitCommit: String, pub GoVersion: String, } #[derive(Debug, RustcEncodable, RustcDecodable)] #[allow(non_snake_case)] pub struct Info { pub Containers: u64, pub Images: u64, pub Driver: String, pub DockerRootDir: String, pub DriverStatus: Vec>, pub ID: String, pub KernelVersion: String, // pub Labels: Option, pub MemTotal: u64, pub MemoryLimit: bool, pub NCPU: u64, pub NEventsListener: u64, pub NGoroutines: u64, pub Name: String, pub OperatingSystem: String, // pub RegistryConfig:??? pub SwapLimit: bool, pub SystemTime: Option, } #[derive(Debug, RustcEncodable, RustcDecodable)] #[allow(non_snake_case)] pub struct ContainerCreateInfo { pub Id: String, pub Warnings: Option>, } #[derive(Debug, RustcEncodable, RustcDecodable)] #[allow(non_snake_case)] pub struct History { pub Id: String, pub Created: u64, pub CreatedBy: String, } #[derive(Debug, RustcEncodable, RustcDecodable)] #[allow(non_snake_case)] pub struct Exit { pub StatusCode: u64, } #[derive(Debug, RustcEncodable, RustcDecodable)] #[allow(non_snake_case)] pub struct Event { pub status: Option, pub id: Option, pub from: Option, pub time: u64, pub timeNano: u64, } // fixme: all fields are options because PullInfo.progressDefault is sometimes an empty object instead of a null/absent value #[derive(Clone, Debug, RustcDecodable)] pub struct ProgressDetail { current: Option, total: Option, status: Option, // fixme: it looks like this field isn't deserializing properly } #[derive(Clone, Debug, RustcDecodable)] #[allow(non_snake_case)] pub struct PullInfo { pub id: Option, pub status: String, pub progress: Option, pub progressDetail: Option, } #[derive(Debug)] pub enum Output { Status { id: Option, status: String, progress: Option, progress_detail: Option, }, Stream(String), Err(String), } #[derive(Debug)] pub enum Status { Untagged(String), Deleted(String), }