Skip to content

Conversation

@Mingun
Copy link
Collaborator

@Mingun Mingun commented Nov 8, 2025

Currently, deserialization of

<root>
  42
</root>

into usize, for example, is not possible, because number is surrounded by space characters. I was sure, that this was possible before #285, and still is possible, but realized:

  • it was not possible, we are always returns error in such case
  • Disable trim_text in Deserializer from_reader #285 introduced Text::trimmed, but it is not used... Probably because during polishing it was replaced by calls to Deserializer::skip_whitespaces, but it was intention, that the example above should work

So this PR adds missing tests and ensure that spaces around numbers and booleans are stripped. However, if after stripping text cannot be parsed as number or boolean, we call visit_str family of methods with the original, not trimmed string.

char case are more complicated, because we want to able to deserialize single space chars, but at the same time want to allow something like that:

<root>
  r
</root>

to be deserialized, as char r. To do that, if text content consist only from spaces, we pass that string to the visitor unchanged, otherwise spaces will be stripped and the trimmed string will be passed to the visitor.

…dependent tests

Each test checks its own path in Deserializer::read_string_impl,
it is better to track them individually.

Also mark each line with the set of tests which reach it
failures (170):
    trivial::cdata::char_::field
    trivial::cdata::char_::text
    trivial::cdata::char_::text_tag_after
    trivial::cdata::char_::text_tag_before
    trivial::cdata::char_::wrapped
    trivial::cdata::f32_::field
    trivial::cdata::f32_::text
    trivial::cdata::f32_::text_tag_after
    trivial::cdata::f32_::text_tag_before
    trivial::cdata::f32_::wrapped
    trivial::cdata::f64_::field
    trivial::cdata::f64_::text
    trivial::cdata::f64_::text_tag_after
    trivial::cdata::f64_::text_tag_before
    trivial::cdata::f64_::wrapped
    trivial::cdata::false_::field
    trivial::cdata::false_::text
    trivial::cdata::false_::text_tag_after
    trivial::cdata::false_::text_tag_before
    trivial::cdata::false_::wrapped
    trivial::cdata::i128_::field
    trivial::cdata::i128_::text
    trivial::cdata::i128_::text_tag_after
    trivial::cdata::i128_::text_tag_before
    trivial::cdata::i128_::wrapped
    trivial::cdata::i16_::field
    trivial::cdata::i16_::text
    trivial::cdata::i16_::text_tag_after
    trivial::cdata::i16_::text_tag_before
    trivial::cdata::i16_::wrapped
    trivial::cdata::i32_::field
    trivial::cdata::i32_::text
    trivial::cdata::i32_::text_tag_after
    trivial::cdata::i32_::text_tag_before
    trivial::cdata::i32_::wrapped
    trivial::cdata::i64_::field
    trivial::cdata::i64_::text
    trivial::cdata::i64_::text_tag_after
    trivial::cdata::i64_::text_tag_before
    trivial::cdata::i64_::wrapped
    trivial::cdata::i8_::field
    trivial::cdata::i8_::text
    trivial::cdata::i8_::text_tag_after
    trivial::cdata::i8_::text_tag_before
    trivial::cdata::i8_::wrapped
    trivial::cdata::isize_::field
    trivial::cdata::isize_::text
    trivial::cdata::isize_::text_tag_after
    trivial::cdata::isize_::text_tag_before
    trivial::cdata::isize_::wrapped
    trivial::cdata::true_::field
    trivial::cdata::true_::text
    trivial::cdata::true_::text_tag_after
    trivial::cdata::true_::text_tag_before
    trivial::cdata::true_::wrapped
    trivial::cdata::u128_::field
    trivial::cdata::u128_::text
    trivial::cdata::u128_::text_tag_after
    trivial::cdata::u128_::text_tag_before
    trivial::cdata::u128_::wrapped
    trivial::cdata::u16_::field
    trivial::cdata::u16_::text
    trivial::cdata::u16_::text_tag_after
    trivial::cdata::u16_::text_tag_before
    trivial::cdata::u16_::wrapped
    trivial::cdata::u32_::field
    trivial::cdata::u32_::text
    trivial::cdata::u32_::text_tag_after
    trivial::cdata::u32_::text_tag_before
    trivial::cdata::u32_::wrapped
    trivial::cdata::u64_::field
    trivial::cdata::u64_::text
    trivial::cdata::u64_::text_tag_after
    trivial::cdata::u64_::text_tag_before
    trivial::cdata::u64_::wrapped
    trivial::cdata::u8_::field
    trivial::cdata::u8_::text
    trivial::cdata::u8_::text_tag_after
    trivial::cdata::u8_::text_tag_before
    trivial::cdata::u8_::wrapped
    trivial::cdata::usize_::field
    trivial::cdata::usize_::text
    trivial::cdata::usize_::text_tag_after
    trivial::cdata::usize_::text_tag_before
    trivial::cdata::usize_::wrapped
    trivial::text::char_::field
    trivial::text::char_::text
    trivial::text::char_::text_tag_after
    trivial::text::char_::text_tag_before
    trivial::text::char_::wrapped
    trivial::text::f32_::field
    trivial::text::f32_::text
    trivial::text::f32_::text_tag_after
    trivial::text::f32_::text_tag_before
    trivial::text::f32_::wrapped
    trivial::text::f64_::field
    trivial::text::f64_::text
    trivial::text::f64_::text_tag_after
    trivial::text::f64_::text_tag_before
    trivial::text::f64_::wrapped
    trivial::text::false_::field
    trivial::text::false_::text
    trivial::text::false_::text_tag_after
    trivial::text::false_::text_tag_before
    trivial::text::false_::wrapped
    trivial::text::i128_::field
    trivial::text::i128_::text
    trivial::text::i128_::text_tag_after
    trivial::text::i128_::text_tag_before
    trivial::text::i128_::wrapped
    trivial::text::i16_::field
    trivial::text::i16_::text
    trivial::text::i16_::text_tag_after
    trivial::text::i16_::text_tag_before
    trivial::text::i16_::wrapped
    trivial::text::i32_::field
    trivial::text::i32_::text
    trivial::text::i32_::text_tag_after
    trivial::text::i32_::text_tag_before
    trivial::text::i32_::wrapped
    trivial::text::i64_::field
    trivial::text::i64_::text
    trivial::text::i64_::text_tag_after
    trivial::text::i64_::text_tag_before
    trivial::text::i64_::wrapped
    trivial::text::i8_::field
    trivial::text::i8_::text
    trivial::text::i8_::text_tag_after
    trivial::text::i8_::text_tag_before
    trivial::text::i8_::wrapped
    trivial::text::isize_::field
    trivial::text::isize_::text
    trivial::text::isize_::text_tag_after
    trivial::text::isize_::text_tag_before
    trivial::text::isize_::wrapped
    trivial::text::true_::field
    trivial::text::true_::text
    trivial::text::true_::text_tag_after
    trivial::text::true_::text_tag_before
    trivial::text::true_::wrapped
    trivial::text::u128_::field
    trivial::text::u128_::text
    trivial::text::u128_::text_tag_after
    trivial::text::u128_::text_tag_before
    trivial::text::u128_::wrapped
    trivial::text::u16_::field
    trivial::text::u16_::text
    trivial::text::u16_::text_tag_after
    trivial::text::u16_::text_tag_before
    trivial::text::u16_::wrapped
    trivial::text::u32_::field
    trivial::text::u32_::text
    trivial::text::u32_::text_tag_after
    trivial::text::u32_::text_tag_before
    trivial::text::u32_::wrapped
    trivial::text::u64_::field
    trivial::text::u64_::text
    trivial::text::u64_::text_tag_after
    trivial::text::u64_::text_tag_before
    trivial::text::u64_::wrapped
    trivial::text::u8_::field
    trivial::text::u8_::text
    trivial::text::u8_::text_tag_after
    trivial::text::u8_::text_tag_before
    trivial::text::u8_::wrapped
    trivial::text::usize_::field
    trivial::text::usize_::text
    trivial::text::usize_::text_tag_after
    trivial::text::usize_::text_tag_before
    trivial::text::usize_::wrapped
@Mingun Mingun force-pushed the trim-spaces-for-primitives branch from 3ac943a to 10d0646 Compare November 8, 2025 13:15
@codecov-commenter
Copy link

⚠️ Please install the 'codecov app svg image' to ensure uploads and comments are reliably processed by Codecov.

Codecov Report

❌ Patch coverage is 86.11111% with 5 lines in your changes missing coverage. Please review.
✅ Project coverage is 58.11%. Comparing base (38b44d4) to head (10d0646).
⚠️ Report is 65 commits behind head on master.

Files with missing lines Patch % Lines
src/de/mod.rs 75.00% 2 Missing ⚠️
src/de/simple_type.rs 90.90% 2 Missing ⚠️
src/utils.rs 83.33% 1 Missing ⚠️
❗ Your organization needs to install the Codecov GitHub app to enable full functionality.
Additional details and impacted files
@@            Coverage Diff             @@
##           master     #912      +/-   ##
==========================================
+ Coverage   55.52%   58.11%   +2.58%     
==========================================
  Files          42       42              
  Lines       15511    15515       +4     
==========================================
+ Hits         8613     9016     +403     
+ Misses       6898     6499     -399     
Flag Coverage Δ
unittests 58.11% <86.11%> (+2.58%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@Mingun Mingun merged commit 8188346 into tafia:master Nov 11, 2025
7 checks passed
@Mingun Mingun deleted the trim-spaces-for-primitives branch November 11, 2025 16:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants