1use crate::enums::{ByteUnit, Error};
2use guid_create::GUID;
3use serde::{Deserialize, Serialize};
4use serde_json::Value;
5
6#[derive(Serialize, Deserialize, PartialEq, Debug)]
7pub struct MemoryLimit {
8 pub unit: ByteUnit,
9 pub size: u128,
10}
11
12impl MemoryLimit {
13 pub fn from_string(mut input: String, env_variable: String) -> Result<Self, Error<'static>> {
14 match ByteUnit::from_string(input.clone()) {
15 Ok(unit) => {
16 input.pop();
17 match input.parse::<u128>() {
18 Ok(size) => Ok(Self { unit, size }),
19 Err(_) => Err(Error::EnvMalformed(
20 env_variable,
21 "Ins't a valid u128".to_string(),
22 )),
23 }
24 }
25 Err(_) => Err(Error::UnknownMemoryUnit),
26 }
27 }
28}
29
30#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
31pub struct ApplicationLimits {
32 pub disk: u128,
33 pub fds: u128,
34 pub mem: u128,
35}
36
37#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
38pub struct Application {
39 pub application_id: GUID,
40 pub application_name: String,
41 pub application_uris: Vec<String>,
42 pub application_version: GUID,
43 pub cf_api: String,
44 pub limits: ApplicationLimits,
45 pub name: String,
46 pub process_id: String,
47 pub process_type: String,
48 pub organization_id: GUID,
49 pub organization_name: String,
50 pub space_id: GUID,
51 pub space_name: String,
52 pub start: Option<String>,
53 pub started_at: Option<String>,
54 pub started_at_timestamp: Option<String>,
55 pub state_timestamp: Option<String>,
56 pub uris: Vec<String>,
57 pub version: GUID,
58}
59
60#[derive(Serialize, Deserialize, Clone, PartialEq, Debug)]
61pub struct ServiceVolumeMount {
62 pub container_dir: String,
63 pub device_type: String,
64 pub mode: String,
65}
66
67#[derive(Serialize, Deserialize, Clone, PartialEq, Debug)]
68pub struct Service<Credentials = Value> {
69 pub binding_guid: GUID,
70 pub binding_name: Option<String>,
71 pub instance_guid: GUID,
72 pub instance_name: String,
73 pub name: String,
74 pub label: String,
75 pub tags: Vec<String>,
76 pub plan: String,
77 pub credentials: Credentials,
78 pub syslog_drain_url: Option<String>,
79 pub volume_mounts: Vec<ServiceVolumeMount>,
80}