Skip to content

Commit 478f672

Browse files
committed
Skip whitespace for nodes containing a text event.
1 parent 6a28e86 commit 478f672

File tree

2 files changed

+12
-33
lines changed

2 files changed

+12
-33
lines changed

src/de/map.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,14 @@ where
273273
QNameDeserializer::from_attr(QName(&slice[key]), decoder, &mut self.de.key_buf)?;
274274
seed.deserialize(de).map(Some)
275275
} else {
276-
self.skip_whitespaces()?;
276+
// If we have dedicated "$text" field, whitespace-only text may be significant.
277+
// That also means, that type with `$text` fields behaves as if its element has
278+
// `xml:space="preserve"` attribute: you must not have pretty-print indents
279+
// inside this element.
280+
if !self.has_text_field {
281+
self.skip_whitespaces()?;
282+
}
283+
277284
// try getting from events (<key>value</key>)
278285
match self.de.peek()? {
279286
// If we have dedicated "$text" field, it will not be passed to "$value" field

tests/serde-de-seq.rs

Lines changed: 4 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -831,14 +831,7 @@ mod fixed_name {
831831
}
832832

833833
from_str::<List>(
834-
r#"
835-
<root>
836-
<item/>
837-
<item/>
838-
text
839-
<![CDATA[cdata]]>
840-
</root>
841-
"#,
834+
r#"<root><item/><item/>text<![CDATA[cdata]]></root>"#,
842835
)
843836
.unwrap();
844837
}
@@ -1688,14 +1681,7 @@ mod fixed_name {
16881681
}
16891682

16901683
let data: List = from_str(
1691-
r#"
1692-
<root>
1693-
<item/>
1694-
<item/>
1695-
text
1696-
<![CDATA[cdata]]>
1697-
</root>
1698-
"#,
1684+
r#"<root><item/><item/>text<![CDATA[cdata]]></root>"#,
16991685
)
17001686
.unwrap();
17011687

@@ -2946,14 +2932,7 @@ mod variable_name {
29462932
}
29472933

29482934
from_str::<List>(
2949-
r#"
2950-
<root>
2951-
<item/>
2952-
<item/>
2953-
text
2954-
<![CDATA[cdata]]>
2955-
</root>
2956-
"#,
2935+
r#"<root><item/><item/>text<![CDATA[cdata]]></root>"#,
29572936
)
29582937
.unwrap();
29592938
}
@@ -4015,14 +3994,7 @@ mod variable_name {
40153994
}
40163995

40173996
let data: List = from_str(
4018-
r#"
4019-
<root>
4020-
<item/>
4021-
<item/>
4022-
text
4023-
<![CDATA[cdata]]>
4024-
</root>
4025-
"#,
3997+
r#"<root><item/><item/>text<![CDATA[cdata]]></root>"#,
40263998
)
40273999
.unwrap();
40284000

0 commit comments

Comments
 (0)