use std::fmt::{Display, Formatter}; use std::str::FromStr; #[derive(serde::Serialize, serde::Deserialize, Debug, Copy, Clone, Eq, PartialEq)] pub enum OTAPlatform { #[serde(rename = "Wt32-Eth01")] Wt32Eth01, } impl OTAPlatform { /// Get the list of supported platforms pub fn supported_platforms() -> &'static [Self] { &[OTAPlatform::Wt32Eth01] } } impl Display for OTAPlatform { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { let s = serde_json::to_string(&self).unwrap().replace('"', ""); write!(f, "{s}") } } impl FromStr for OTAPlatform { type Err = anyhow::Error; fn from_str(s: &str) -> Result { Ok(serde_json::from_str::(&format!("\"{s}\""))?) } } /// Single OTA update information #[derive(serde::Serialize, serde::Deserialize, Debug, Clone, Eq, PartialEq)] pub struct OTAUpdate { pub platform: OTAPlatform, pub version: semver::Version, pub file_size: u64, }