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
use xmltree::Element; use crate::elementext::ElementExt; #[cfg(feature = "unproven")] use crate::encode::Encode; use crate::error::*; #[cfg(feature = "unproven")] use crate::new_element; use crate::types::Parse; #[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))] #[derive(Clone, Copy, Debug, PartialEq)] pub enum Access { ReadOnly, ReadWrite, ReadWriteOnce, WriteOnce, WriteOnly, } impl Parse for Access { type Object = Access; type Error = anyhow::Error; fn parse(tree: &Element) -> Result<Access> { let text = tree.get_text()?; match &text[..] { "read-only" => Ok(Access::ReadOnly), "read-write" => Ok(Access::ReadWrite), "read-writeOnce" => Ok(Access::ReadWriteOnce), "write-only" => Ok(Access::WriteOnly), "writeOnce" => Ok(Access::WriteOnce), _ => Err(SVDError::UnknownAccessType(tree.clone(), text).into()), } } } #[cfg(feature = "unproven")] impl Encode for Access { type Error = anyhow::Error; fn encode(&self) -> Result<Element> { let text = match *self { Access::ReadOnly => String::from("read-only"), Access::ReadWrite => String::from("read-write"), Access::ReadWriteOnce => String::from("read-writeOnce"), Access::WriteOnly => String::from("write-only"), Access::WriteOnce => String::from("writeOnce"), }; Ok(new_element("access", Some(text))) } } #[cfg(test)] #[cfg(feature = "unproven")] mod tests { use super::*; use crate::run_test; #[test] fn decode_encode() { let tests = vec![ (Access::ReadOnly, "<access>read-only</access>"), (Access::ReadWrite, "<access>read-write</access>"), (Access::ReadWriteOnce, "<access>read-writeOnce</access>"), (Access::WriteOnly, "<access>write-only</access>"), (Access::WriteOnce, "<access>writeOnce</access>"), ]; run_test::<Access>(&tests[..]); } }