edgehog_device_runtime/ota/
config.rs1use std::fmt::Display;
20
21use serde::Deserialize;
22
23#[derive(Debug, Clone, Copy, Default, Deserialize, PartialEq, Eq)]
24pub struct OtaConfig {
25 #[serde(default)]
26 pub reboot: Reboot,
27 #[serde(default)]
28 pub streaming: bool,
29 #[serde(default)]
31 pub rauc: RaucConfig,
32}
33
34#[derive(Debug, Clone, Copy, Default, Deserialize, PartialEq, Eq)]
35#[serde(rename_all = "lowercase")]
36pub enum Reboot {
37 #[default]
38 Default,
39 External,
40}
41
42#[derive(Debug, Clone, Copy, Default, Deserialize, PartialEq, Eq)]
44pub struct RaucConfig {
45 #[serde(default)]
47 pub dbus_socket: RaucDbus,
48}
49
50#[derive(Debug, Clone, Copy, Default, Deserialize, PartialEq, Eq)]
52#[serde(rename_all = "lowercase")]
53pub enum RaucDbus {
54 #[default]
56 System,
57 Session,
59}
60
61impl Display for RaucDbus {
62 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
63 match self {
64 RaucDbus::System => write!(f, "system"),
65 RaucDbus::Session => write!(f, "session"),
66 }
67 }
68}
69
70#[cfg(test)]
71mod tests {
72 use pretty_assertions::assert_eq;
73
74 use super::*;
75
76 #[test]
77 fn should_deserialize() {
78 let string = r#"
79 reboot = "external"
80 streaming = true
81 "#;
82
83 let config: OtaConfig = toml::from_str(string).unwrap();
84
85 let exp = OtaConfig {
86 reboot: Reboot::External,
87 streaming: true,
88 rauc: RaucConfig {
89 dbus_socket: RaucDbus::System,
90 },
91 };
92
93 assert_eq!(config, exp);
94 }
95
96 #[test]
97 fn should_deserialize_default() {
98 let string = r#"
99 "#;
100
101 let config: OtaConfig = toml::from_str(string).unwrap();
102
103 let exp = OtaConfig {
104 reboot: Reboot::Default,
105 streaming: false,
106 rauc: RaucConfig {
107 dbus_socket: RaucDbus::System,
108 },
109 };
110
111 assert_eq!(config, exp);
112 }
113
114 #[test]
115 fn should_deserialize_rauc() {
116 let string = r#"
117 [rauc]
118 dbus_socket = "session"
119 "#;
120
121 let config: OtaConfig = toml::from_str(string).unwrap();
122
123 let exp = OtaConfig {
124 reboot: Reboot::Default,
125 streaming: false,
126 rauc: RaucConfig {
127 dbus_socket: RaucDbus::Session,
128 },
129 };
130
131 assert_eq!(config, exp);
132 }
133}