1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
use bitflags::*; use serde::{Deserialize, Deserializer, Serialize, Serializer}; bitflags! { pub struct UpdateFrequencies: u16 { const POLL = 0x01; const DAILY = 0x02; const WEEKLY = 0x04; const MONTHLY = 0x08; const QUARTERLY = 0x10; const ANNUALLY = 0x20; const AUTOMATIC = 0x40; } } impl Serialize for UpdateFrequencies { fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: Serializer, { serializer.serialize_u16(self.bits()) } } impl<'de> Deserialize<'de> for UpdateFrequencies { fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: Deserializer<'de>, { Self::from_bits(u16::deserialize(deserializer)?) .ok_or_else(|| serde::de::Error::custom("unknown update frequency")) } }