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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
#[cfg(feature = "unproven")] use std::collections::HashMap; use crate::elementext::ElementExt; use xmltree::Element; #[cfg(feature = "unproven")] use crate::encode::Encode; use crate::error::*; use crate::types::Parse; #[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))] #[derive(Clone, Copy, Debug, Eq, PartialEq)] pub enum Usage { Read, Write, ReadWrite, } impl Parse for Usage { type Object = Usage; type Error = anyhow::Error; fn parse(tree: &Element) -> Result<Usage> { let text = tree.get_text()?; match &text[..] { "read" => Ok(Usage::Read), "write" => Ok(Usage::Write), "read-write" => Ok(Usage::ReadWrite), _ => Err(SVDError::UnknownUsageVariant(tree.clone()).into()), } } } #[cfg(feature = "unproven")] impl Encode for Usage { type Error = anyhow::Error; fn encode(&self) -> Result<Element> { let text = match *self { Usage::Read => String::from("read"), Usage::Write => String::from("write"), Usage::ReadWrite => String::from("read-write"), }; Ok(Element { prefix: None, namespace: None, namespaces: None, name: String::from("usage"), attributes: HashMap::new(), children: Vec::new(), text: Some(text), }) } } #[cfg(test)] #[cfg(feature = "unproven")] mod tests { use super::*; use crate::run_test; #[test] fn decode_encode() { let tests = vec![ (Usage::Read, "<usage>read</usage>"), (Usage::Write, "<usage>write</usage>"), (Usage::ReadWrite, "<usage>read-write</usage>"), ]; run_test::<Usage>(&tests[..]); } }