Skip to main content

DeserializerConfig

Struct DeserializerConfig 

Source
pub struct DeserializerConfig { /* private fields */ }
Expand description

Configures how XML documents are deserialized.

See the crate documentation for how XML maps onto the data model of deser.

Implementations§

Source§

impl DeserializerConfig

Source

pub const fn new() -> DeserializerConfig

Creates the default configuration.

Source

pub const fn attribute_prefix(self, prefix: &'static str) -> DeserializerConfig

Sets the prefix of the keys of attributes.

The default is @: <a href="x"/> is {"@href": "x"}.

Source

pub const fn text_key(self, key: &'static str) -> DeserializerConfig

Sets the key of the text of elements that are maps.

The default is $text: <a href="x">y</a> is {"@href": "x", "$text": "y"}.

Source

pub const fn namespaces( self, namespaces: &'static [(&'static str, &'static str)], ) -> DeserializerConfig

Sets the prefixes of namespaces.

Names are passed on as written in the document (atom:link), unless their namespace has a prefix here: then they are written with this prefix, whichever prefix the document uses. The empty prefix leaves only the local name. Names in other namespaces are passed on as written or, if namespaces are resolved, as {uri}local. The table can be written with prefixes!.

use deser_xml::DeserializerConfig;

#[derive(deser::Deserialize)]
struct Feed {
    title: String,
    #[deser(rename = "dc:creator")]
    creator: String,
}

const CONFIG: DeserializerConfig = DeserializerConfig::new().namespaces(&[
    ("", "http://www.w3.org/2005/Atom"),
    ("dc", "http://purl.org/dc/elements/1.1/"),
]);
let feed: Feed = CONFIG.from_str(r#"
    <a:feed xmlns:a="http://www.w3.org/2005/Atom"
            xmlns:x="http://purl.org/dc/elements/1.1/">
      <a:title>Example</a:title>
      <x:creator>Jane</x:creator>
    </a:feed>
"#).unwrap();
assert_eq!(feed.title, "Example");
assert_eq!(feed.creator, "Jane");
Source

pub const fn resolve_namespaces(self, yes: bool) -> DeserializerConfig

Enables or disables resolving namespaces.

By default names are passed on as written in the document. If namespaces are resolved, names in a namespace are passed on as {uri}local (the notation of James Clark, attributes are @{uri}local) unless the namespace has a prefix, so the prefixes of the document do not matter. Names without namespace are their local name, the xml prefix is kept (@xml:lang). Prefixes that are not declared are an error. The default is false.

The names can be written with qname! and namespace!:

use deser_xml::DeserializerConfig;

deser_xml::namespace!(atom = "http://www.w3.org/2005/Atom");

#[derive(deser::Deserialize)]
struct Link {
    #[deser(rename = "@href")]
    href: String,
}

#[derive(deser::Deserialize)]
struct Feed {
    #[deser(rename = atom!("title"))]
    title: String,
    #[deser(rename = atom!("link"))]
    link: Link,
}

const CONFIG: DeserializerConfig =
    DeserializerConfig::new().resolve_namespaces(true);
let xml = r#"
    <feed xmlns="http://www.w3.org/2005/Atom">
      <title>Example</title>
      <link href="/a"/>
    </feed>
"#;
let feed: Feed = CONFIG.from_str(xml).unwrap();
assert_eq!(feed.title, "Example");
assert_eq!(feed.link.href, "/a");
Source

pub const fn duplicate_keys(self, policy: DuplicateKeys) -> DeserializerConfig

Sets what happens if an element that stands for a single value is given more than once.

Elements are multimaps: collections (like Vec<T>) collect all child elements with their name, for other types this decides. The default is DuplicateKeys::Error.

Source

pub const fn track_locations(self, yes: bool) -> DeserializerConfig

Enables or disables location tracking.

The byte range of every event is always published into the state (see State::input_range), this controls if the input is published as Source so that errors can be resolved into lines and columns. The default is true.

Source

pub fn from_str<'de, T: Deserialize<'de>>( &self, s: &'de str, ) -> Result<T, Error>

Deserializes a value from a string with this configuration.

Source

pub fn from_slice<'de, T: Deserialize<'de>>( &self, bytes: &'de [u8], ) -> Result<T, Error>

Deserializes a value from bytes with this configuration.

The input must be UTF-8.

Source§

impl DeserializerConfig

Source

pub fn reader<R: Read>(&self, reader: R) -> Reader<R, StreamDeserializer>

Creates a reader of an XML document (see deser::io::Reader).

See StreamDeserializer.

Source

pub fn from_reader<T: DeserializeOwned, R: Read>( &self, reader: R, ) -> Result<T, Error>

Deserializes a document from a reader.

See from_reader.

Trait Implementations§

Source§

impl Clone for DeserializerConfig

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 Debug for DeserializerConfig

Source§

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

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

impl Default for DeserializerConfig

Source§

fn default() -> DeserializerConfig

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

impl Eq for DeserializerConfig

Source§

impl PartialEq for DeserializerConfig

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 StructuralPartialEq for DeserializerConfig

Auto Trait Implementations§

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> 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.