Skip to main content

Root

Struct Root 

Source
pub struct Root<T> {
    pub name: Option<String>,
    pub namespaces: Vec<(String, String)>,
    pub value: T,
}
Expand description

A document: the value of the root element with its name and the namespaces declared on it.

When deserialized the name of the root element and its namespace declarations are captured, when serialized the root element is written with them. The name is kept as the deserializer passes on names: as written, with the configured prefix of its namespace or as {uri}local if namespaces are resolved (see DeserializerConfig). The prefixes of the namespaces are the ones the names use (the configured prefixes for namespaces that have one).

use std::collections::BTreeMap;
use deser_xml::Root;

let doc: Root<BTreeMap<String, String>> =
    deser_xml::from_str(r#"<rss xmlns:dc="urn:dc"><dc:creator>Jane</dc:creator></rss>"#)
        .unwrap();
assert_eq!(doc.name.as_deref(), Some("rss"));
assert_eq!(doc.namespaces, [("dc".to_string(), "urn:dc".to_string())]);
assert_eq!(doc.value["dc:creator"], "Jane");

// values without a name (like maps) are named by the root
let doc = Root::new("r", BTreeMap::from([("@a", 1), ("b", 2)]));
assert_eq!(deser_xml::to_string(&doc).unwrap(), r#"<r a="1"><b>2</b></r>"#);

The name of the root is used over the name of the type of the value and the configured name, its namespaces are declared before the configured ones (which are left out if their prefix is taken). Only documents have a root: in other places, and when serializing to other formats, the name and the namespaces are ignored, when deserializing from other formats the name is None and there are no namespaces.

Fields§

§name: Option<String>

The name of the root element.

§namespaces: Vec<(String, String)>

The namespaces declared on the root element as prefix and URI (the empty prefix is the default namespace).

§value: T

The value of the root element.

Implementations§

Source§

impl<T> Root<T>

Source

pub fn new<S: Into<String>>(name: S, value: T) -> Root<T>

Creates a root element with a name.

Source

pub fn with_namespace<P: Into<String>, U: Into<String>>( self, prefix: P, uri: U, ) -> Root<T>

Declares a namespace on the root element.

use deser_xml::Root;

let doc = Root::new("{urn:a}doc", "x").with_namespace("a", "urn:a");
assert_eq!(
    deser_xml::to_string(&doc).unwrap(),
    r#"<a:doc xmlns:a="urn:a">x</a:doc>"#
);
Source

pub fn into_inner(self) -> T

Returns the value of the root element.

Trait Implementations§

Source§

impl<T: Clone> Clone for Root<T>

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<T: Debug> Debug for Root<T>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<T: Default> Default for Root<T>

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<'de, T: Deserialize<'de>> Deserialize<'de> for Root<T>

Source§

fn deserialize_into<'out>( out: &'out mut Option<Self>, state: &mut State, ) -> SinkHandle<'out, 'de>

Creates a sink that deserializes the value into the given slot. Read more
Source§

fn expecting() -> Cow<'static, str>

Returns what the value expects, for error messages. Read more
Source§

fn describe_type(d: &mut dyn Describe)

Describes the Rust shape of the type. Read more
Source§

fn deserialize_atom( slot: &mut Slot<T, Self>, atom: Atom<'_>, state: &mut State, ) -> Result<(), Error>

Deserializes an atom into the slot. Read more
Source§

fn deserialize_borrowed_atom( slot: &mut Slot<T, Self>, atom: Atom<'de>, state: &mut State, ) -> Result<(), Error>

Deserializes an atom that borrows from the data being deserialized into the slot. Read more
Source§

fn initial_value() -> Option<T>

Provides the value of a missing struct field. Read more
Source§

fn deserialize_update<'out>( value: &'out mut T, state: &mut State, ) -> SinkHandle<'out, 'de>

Creates a sink that updates an existing value. Read more
Source§

impl<T: Eq> Eq for Root<T>

Source§

impl<T: Hash> Hash for Root<T>

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl<T: PartialEq> PartialEq for Root<T>

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl<T: Serialize> Serialize for Root<T>

Source§

fn serialize<'a>(this: &'a Self, state: &mut State) -> Result<Emit<'a>, Error>

Serializes the value.
Source§

fn finish(this: &Self, state: &mut State) -> Result<(), Error>

Invoked after the serialization finished. Read more
Source§

fn is_optional(this: &Self) -> bool

Checks if the value represents an optional value. Read more
Source§

fn container_shape(this: &Self) -> ContainerShape

Returns the shape of the value if it’s a map or sequence. Read more
Source§

fn describe(this: &Self, d: &mut dyn Describe)

Describes the Rust shape of the value. Read more
Source§

impl<T: PartialEq> StructuralPartialEq for Root<T>

Auto Trait Implementations§

§

impl<T> Freeze for Root<T>
where T: Freeze,

§

impl<T> RefUnwindSafe for Root<T>
where T: RefUnwindSafe,

§

impl<T> Send for Root<T>
where T: Send,

§

impl<T> Sync for Root<T>
where T: Sync,

§

impl<T> Unpin for Root<T>
where T: Unpin,

§

impl<T> UnsafeUnpin for Root<T>
where T: UnsafeUnpin,

§

impl<T> UnwindSafe for Root<T>
where T: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.