use serde::{Deserialize, Serialize};
use std::borrow::Cow;
#[non_exhaustive]
#[derive(Serialize, Deserialize, Default, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "debug", derive(Debug))]
pub struct Xml {
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<Cow<'static, str>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub namespace: Option<Cow<'static, str>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub prefix: Option<Cow<'static, str>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub attribute: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub wrapped: Option<bool>,
}
impl Xml {
pub fn new() -> Self {
Self {
..Default::default()
}
}
pub fn name<S: Into<Cow<'static, str>>>(mut self, name: S) -> Self {
self.name = Some(name.into());
self
}
pub fn namespace<S: Into<Cow<'static, str>>>(mut self, namespace: S) -> Self {
self.namespace = Some(namespace.into());
self
}
pub fn prefix<S: Into<Cow<'static, str>>>(mut self, prefix: S) -> Self {
self.prefix = Some(prefix.into());
self
}
pub fn attribute(mut self, attribute: bool) -> Self {
self.attribute = Some(attribute);
self
}
pub fn wrapped(mut self, wrapped: bool) -> Self {
self.wrapped = Some(wrapped);
self
}
}
#[cfg(test)]
mod tests {
use super::Xml;
#[test]
fn xml_new() {
let mut xml = Xml::new();
assert!(xml.name.is_none());
assert!(xml.namespace.is_none());
assert!(xml.prefix.is_none());
assert!(xml.attribute.is_none());
assert!(xml.wrapped.is_none());
xml = xml.name("name");
assert!(xml.name.is_some());
xml = xml.namespace("namespave");
assert!(xml.namespace.is_some());
xml = xml.prefix("prefix");
assert!(xml.prefix.is_some());
xml = xml.attribute(true);
assert!(xml.attribute.is_some());
xml = xml.wrapped(true);
assert!(xml.wrapped.is_some());
}
}