1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
use serde::{Deserialize, Serialize};
use std::collections::HashMap;

#[derive(Serialize, Deserialize, Debug)]
pub struct ServiceConfig {
    pub autostart: Option<bool>,
    pub autostop: Option<String>,
    pub concurrency: Option<ConcurrencyConfig>,
    pub ports: Option<Vec<MachinePort>>,
    pub internal_port: Option<u16>,
}

#[derive(Serialize, Deserialize, Debug)]
#[serde(rename_all = "lowercase")]
pub enum AutostopEnum {
    Off,
    Stop,
    Suspend,
}

#[derive(Serialize, Deserialize, Debug)]
pub struct ConcurrencyConfig {
    pub hard_limit: Option<u32>,
    pub soft_limit: Option<u32>,
    pub concurrency_type: Option<String>,
}

#[derive(Serialize, Deserialize, Debug)]
#[serde(rename_all = "lowercase")]
pub enum ConcurrencyTypeEnum {
    Connections,
    Requests,
}

#[derive(Serialize, Deserialize, Debug)]
pub struct MachinePort {
    pub end_port: Option<u16>,
    pub force_https: Option<bool>,
    pub handlers: Option<Vec<String>>,
    pub http_options: Option<HttpOptions>,
    pub proxy_proto_options: Option<ProxyProtoOptions>,
    pub start_port: Option<u16>,
    pub tls_options: Option<TlsOptions>,
}

#[derive(Serialize, Deserialize, Debug)]
pub struct HttpOptions {
    pub compress: Option<bool>,
    pub h2_backend: Option<bool>,
    pub headers_read_timeout: Option<u64>,
    pub idle_timeout: Option<u64>,
    pub response: Option<ResponseOptions>,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct ResponseOptions {
    pub headers: Option<HashMap<String, String>>,
    pub pristine: Option<bool>,
}

#[derive(Serialize, Deserialize, Debug)]
pub struct ProxyProtoOptions {
    pub version: Option<String>,
}

#[derive(Serialize, Deserialize, Debug)]
pub struct TlsOptions {
    pub alpn: Option<Vec<String>>,
    pub default_self_signed: Option<bool>,
    pub versions: Option<Vec<String>>,
}