update_package/
update_mode.rs1use serde::{Deserialize, Serialize};
8use std::str::FromStr;
9use thiserror::Error;
10
11#[derive(Clone, Debug, PartialEq, Eq, Error)]
13#[allow(missing_docs)]
14pub enum ParseUpdateModeError {
15 #[error("update mode not supported: '{0}'")]
16 UpdateModeNotSupported(String),
17}
18
19#[derive(Clone, Copy, Debug, PartialEq, Eq, Deserialize, Serialize, Default)]
21#[serde(rename_all = "kebab-case")]
22pub enum UpdateMode {
23 #[default]
25 Normal,
26 ForceRecovery,
28}
29
30impl FromStr for UpdateMode {
31 type Err = ParseUpdateModeError;
32
33 fn from_str(s: &str) -> Result<Self, Self::Err> {
34 match s {
35 "normal" => Ok(UpdateMode::Normal),
36 "force-recovery" => Ok(UpdateMode::ForceRecovery),
37 other => Err(ParseUpdateModeError::UpdateModeNotSupported(other.to_string())),
38 }
39 }
40}
41
42#[cfg(test)]
43mod tests {
44 use super::*;
45
46 #[test]
47 fn test_from_str() {
48 assert_eq!("normal".parse::<UpdateMode>().unwrap(), UpdateMode::Normal);
49 assert_eq!("force-recovery".parse::<UpdateMode>().unwrap(), UpdateMode::ForceRecovery);
50 assert_eq!(
51 "potato".parse::<UpdateMode>().unwrap_err(),
52 ParseUpdateModeError::UpdateModeNotSupported("potato".to_string())
53 );
54 }
55}