diff --git a/instant-xml/src/de.rs b/instant-xml/src/de.rs index c2fbbc3..deb6e29 100644 --- a/instant-xml/src/de.rs +++ b/instant-xml/src/de.rs @@ -339,6 +339,9 @@ impl<'xml> Iterator for Context<'xml> { Ok(Token::Text { text }) => { return Some(decode(text.as_str()).map(Node::Text)); } + Ok(Token::Cdata { text, .. }) => { + return Some(Ok(Node::Text(Cow::Borrowed(text.as_str())))); + } Ok(Token::Declaration { .. }) => match self.stack.is_empty() { false => return Some(Err(Error::UnexpectedToken(format!("{token:?}")))), true => {} diff --git a/instant-xml/tests/escaping.rs b/instant-xml/tests/escaping.rs index 60b3901..4d3de50 100644 --- a/instant-xml/tests/escaping.rs +++ b/instant-xml/tests/escaping.rs @@ -55,3 +55,28 @@ fn special_entities() { "&"<>'aa&"<>'cc", ); } + +#[derive(Debug, PartialEq, Eq, FromXml, ToXml)] +struct SimpleCData<'a> { + #[xml(borrow)] + foo: Cow<'a, str>, +} + +#[test] +fn simple_cdata() { + assert_eq!( + from_str::("]]>") + .unwrap(), + SimpleCData { + foo: Cow::Borrowed("") + } + ); + + assert_eq!( + to_string(&SimpleCData { + foo: Cow::Borrowed("") + }) + .unwrap(), + "<foo>", + ); +}