split up json parsing logic

This commit is contained in:
4yn
2022-02-12 23:43:28 +08:00
parent 4dbeb432ec
commit 2d56431fe2
4 changed files with 126 additions and 106 deletions

View File

@@ -1,3 +1,5 @@
use serde_json::Value;
#[derive(Debug, Clone)]
pub enum HardwareSpec {
TasollerOne,
@@ -16,3 +18,37 @@ pub enum DeviceMode {
led_enabled: bool,
},
}
impl DeviceMode {
pub fn from_serde_value(v: &Value) -> Option<Self> {
Some(match v["deviceMode"].as_str()? {
"none" => DeviceMode::None,
"tasoller-one" => DeviceMode::Hardware {
spec: HardwareSpec::TasollerOne,
},
"tasoller-two" => DeviceMode::Hardware {
spec: HardwareSpec::TasollerTwo,
},
"yuancon" => DeviceMode::Hardware {
spec: HardwareSpec::Yuancon,
},
"brokenithm" => DeviceMode::Brokenithm {
ground_only: false,
led_enabled: false,
},
"brokenithm-led" => DeviceMode::Brokenithm {
ground_only: false,
led_enabled: true,
},
"brokenithm-ground" => DeviceMode::Brokenithm {
ground_only: true,
led_enabled: false,
},
"brokenithm-ground-led" => DeviceMode::Brokenithm {
ground_only: true,
led_enabled: true,
},
_ => return None,
})
}
}