//!
@@ -643,9 +627,8 @@
//! # quick_xml::de::from_str(r#"
..."#).unwrap(),
//! # );
//! # assert_eq!(
-//! # AnyName { field: (), any_name: Choice::Text("text".into()) },
-//! # // TODO: After #474 parse mixed content
-//! # quick_xml::de::from_str(r#"
text"#).unwrap(),
+//! # AnyName { field: (), any_name: Choice::Text("text cdata ".into()) },
+//! # quick_xml::de::from_str(r#"
text "#).unwrap(),
//! # );
//! ```
//!
@@ -967,8 +950,7 @@
//! from the full element (`
...`), so they could use the element name
//! to choose the right variant:
//!
-//! ```ignore
-//! // FIXME: #474
+//! ```
//! # use pretty_assertions::assert_eq;
//! # use serde::Deserialize;
//! # type One = ();
@@ -985,9 +967,7 @@
//! # quick_xml::de::from_str(r#"
...text
......"#).unwrap(),
//! # );
//! ```
-//! ```ignore
-//! // FIXME: #474, Custom("unknown variant `two`,
-//! // expected `one`")
+//! ```
//! # use pretty_assertions::assert_eq;
//! # use serde::Deserialize;
//! # #[derive(Debug, PartialEq)]
@@ -1011,11 +991,6 @@
//! NOTE: consequent text and CDATA nodes are merged into the one text node,
//! so you cannot have two adjacent string types in your sequence.
//!
-//!
-//!
-//! Merging of the text / CDATA content is tracked in the issue [#474] and
-//! will be available in the next release.
-//!
//!
//!
//!
@@ -1040,8 +1015,7 @@
//!
-//!
-//! Merging of the text / CDATA content is tracked in the issue [#474] and
-//! will be available in the next release.
-//!
//!
//!
//!
@@ -1237,8 +1198,7 @@
//!
//! You MUST specify `#[serde(rename = "$value")]` on that field:
//!
-//! ```ignore
-//! // FIXME: #474
+//! ```
//! # use pretty_assertions::assert_eq;
//! # use serde::Deserialize;
//! # #[derive(Debug, PartialEq)]
@@ -1282,8 +1242,7 @@
//! # ).unwrap(),
//! # );
//! ```
-//! ```ignore
-//! // FIXME: #474
+//! ```
//! # use pretty_assertions::assert_eq;
//! # use serde::Deserialize;
//! # #[derive(Debug, PartialEq)]
@@ -1332,11 +1291,6 @@
//! NOTE: consequent text and CDATA nodes are merged into the one text node,
//! so you cannot have two adjacent string types in your sequence.
//!
-//!
-//!
-//! Merging of the text / CDATA content is tracked in the issue [#474] and
-//! will be available in the next release.
-//!
//!
//!
//!
@@ -1720,7 +1674,6 @@
//!
//! [specification]: https://www.w3.org/TR/xmlschema11-1/#Simple_Type_Definition
//! [`deserialize_with`]: https://serde.rs/field-attrs.html#deserialize_with
-//! [#474]: https://github.com/tafia/quick-xml/issues/474
//! [#497]: https://github.com/tafia/quick-xml/issues/497
// Macros should be defined before the modules that using them
@@ -1734,7 +1687,7 @@ macro_rules! deserialize_type {
V: Visitor<'de>,
{
// No need to unescape because valid integer representations cannot be escaped
- let text = self.read_string(false)?;
+ let text = self.read_string()?;
visitor.$visit(text.parse()?)
}
};
@@ -1766,8 +1719,7 @@ macro_rules! deserialize_primitives {
where
V: Visitor<'de>,
{
- // No need to unescape because valid boolean representations cannot be escaped
- let text = self.read_string(false)?;
+ let text = self.read_string()?;
str2bool(&text, visitor)
}
@@ -1792,7 +1744,7 @@ macro_rules! deserialize_primitives {
where
V: Visitor<'de>,
{
- let text = self.read_string(true)?;
+ let text = self.read_string()?;
match text {
Cow::Borrowed(string) => visitor.visit_borrowed_str(string),
Cow::Owned(string) => visitor.visit_string(string),
@@ -1873,7 +1825,6 @@ macro_rules! deserialize_option {
($de:expr, $deserializer:ident, $visitor:ident) => {
match $de.peek()? {
DeEvent::Text(t) if t.is_empty() => $visitor.visit_none(),
- DeEvent::CData(t) if t.is_empty() => $visitor.visit_none(),
DeEvent::Eof => $visitor.visit_none(),
_ => $visitor.visit_some($deserializer),
}
@@ -1898,6 +1849,7 @@ use std::borrow::Cow;
#[cfg(feature = "overlapped-lists")]
use std::collections::VecDeque;
use std::io::BufRead;
+use std::mem::replace;
#[cfg(feature = "overlapped-lists")]
use std::num::NonZeroUsize;
@@ -1909,6 +1861,38 @@ pub(crate) const VALUE_KEY: &str = "$value";
/// Simplified event which contains only these variants that used by deserializer
#[derive(Debug, PartialEq, Eq)]
pub enum DeEvent<'a> {
+ /// Start tag (with attributes) `