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
impl DeserializerConfig
Sourcepub const fn new() -> DeserializerConfig
pub const fn new() -> DeserializerConfig
Creates the default configuration.
Sourcepub const fn attribute_prefix(self, prefix: &'static str) -> DeserializerConfig
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"}.
Sourcepub const fn text_key(self, key: &'static str) -> DeserializerConfig
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"}.
Sourcepub const fn namespaces(
self,
namespaces: &'static [(&'static str, &'static str)],
) -> DeserializerConfig
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");Sourcepub const fn resolve_namespaces(self, yes: bool) -> DeserializerConfig
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");Sourcepub const fn duplicate_keys(self, policy: DuplicateKeys) -> DeserializerConfig
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.
Sourcepub const fn track_locations(self, yes: bool) -> DeserializerConfig
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.
Sourcepub fn from_str<'de, T: Deserialize<'de>>(
&self,
s: &'de str,
) -> Result<T, Error>
pub fn from_str<'de, T: Deserialize<'de>>( &self, s: &'de str, ) -> Result<T, Error>
Deserializes a value from a string with this configuration.
Sourcepub fn from_slice<'de, T: Deserialize<'de>>(
&self,
bytes: &'de [u8],
) -> Result<T, Error>
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
impl DeserializerConfig
Sourcepub fn reader<R: Read>(&self, reader: R) -> Reader<R, StreamDeserializer>
pub fn reader<R: Read>(&self, reader: R) -> Reader<R, StreamDeserializer>
Creates a reader of an XML document (see
deser::io::Reader).
See StreamDeserializer.
Sourcepub fn from_reader<T: DeserializeOwned, R: Read>(
&self,
reader: R,
) -> Result<T, Error>
pub fn from_reader<T: DeserializeOwned, R: Read>( &self, reader: R, ) -> Result<T, Error>
Deserializes a document from a reader.
See from_reader.