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>",
+ );
+}