1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
7#[serde(rename_all = "lowercase")]
8pub enum Mode {
9 Dev,
10 Test,
11 Rt,
12 Pre,
13 #[default]
14 Pro,
15}
16
17#[derive(Debug, Clone, Default, Serialize, Deserialize)]
19pub struct LogConf {
20 #[serde(default, skip_serializing_if = "Option::is_none")]
21 pub level: Option<String>,
22 #[serde(default, skip_serializing_if = "Option::is_none")]
23 pub encoding: Option<String>,
24 #[serde(default, skip_serializing_if = "Option::is_none")]
25 pub file: Option<String>,
26}
27
28#[derive(Debug, Clone, Default, Serialize, Deserialize)]
30pub struct PrometheusConfig {
31 #[serde(default, skip_serializing_if = "Option::is_none")]
32 pub host: Option<String>,
33 #[serde(default, skip_serializing_if = "Option::is_none")]
34 pub port: Option<u16>,
35 #[serde(default, skip_serializing_if = "Option::is_none")]
36 pub path: Option<String>,
37}
38
39#[derive(Debug, Clone, Default, Serialize, Deserialize)]
41pub struct TraceConfig {
42 #[serde(default, skip_serializing_if = "Option::is_none")]
43 pub name: Option<String>,
44 #[serde(default, skip_serializing_if = "Option::is_none")]
45 pub endpoint: Option<String>,
46 #[serde(default, skip_serializing_if = "Option::is_none")]
47 pub sampler: Option<String>,
48}
49
50#[derive(Debug, Clone, Default, Serialize, Deserialize)]
52pub struct DevServerConfig {
53 #[serde(default)]
54 pub enabled: bool,
55 #[serde(default, skip_serializing_if = "Option::is_none")]
56 pub host: Option<String>,
57 #[serde(default, skip_serializing_if = "Option::is_none")]
58 pub port: Option<u16>,
59}
60
61#[derive(Debug, Clone, Default, Serialize, Deserialize)]
63pub struct ShutdownConf {
64 #[serde(default)]
66 pub enabled: bool,
67 #[serde(default, skip_serializing_if = "Option::is_none")]
69 pub timeout_ms: Option<i64>,
70}
71
72#[derive(Debug, Clone, Serialize, Deserialize, Default)]
74pub struct ServiceConf {
75 #[serde(default)]
77 pub name: String,
78 #[serde(default)]
79 pub log: LogConf,
80 #[serde(default)]
82 pub mode: Mode,
83 #[serde(default, skip_serializing_if = "Option::is_none")]
84 pub metrics_url: Option<String>,
85 #[serde(default, skip_serializing_if = "Option::is_none")]
87 pub prometheus: Option<PrometheusConfig>,
88 #[serde(default, skip_serializing_if = "Option::is_none")]
89 pub telemetry: Option<TraceConfig>,
90 #[serde(default, skip_serializing_if = "Option::is_none")]
91 pub dev_server: Option<DevServerConfig>,
92 #[serde(default, skip_serializing_if = "Option::is_none")]
93 pub shutdown: Option<ShutdownConf>,
94}