Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Do not allow consequent primitives in $value fields and top-level #823

Open
wants to merge 6 commits into
base: master
Choose a base branch
from

Conversation

Mingun
Copy link
Collaborator

@Mingun Mingun commented Oct 15, 2024

This PR changes serialization of $value fields with types like Vec<String> or (u32, u32, u32). Previously this fields would be serialized without delimiters between elements which is unlikely what you want. Now serialization of that types would return SeError::Unsupported.

Example:

struct Xml {
  #[serde(rename = "$value")]
  seq: Vec<String>,

  #[serde(rename = "$value")]
  tuple: (bool, usize, String),
}

Currently it is based on #820, only the last commit implements the change.

This also partially handle this #497 (comment).

Mingun and others added 6 commits October 13, 2024 22:26
That means, never indent "$text" fields and do not indent "$value" fields that
produces string without surrounding tags

failures (208):
    se::content::tests::with_indent::enum_with_text_field::char_amp
    se::content::tests::with_indent::enum_with_text_field::char_apos
    se::content::tests::with_indent::enum_with_text_field::char_gt
    se::content::tests::with_indent::enum_with_text_field::char_lt
    se::content::tests::with_indent::enum_with_text_field::char_non_escaped
    se::content::tests::with_indent::enum_with_text_field::char_quot
    se::content::tests::with_indent::enum_with_text_field::char_space
    se::content::tests::with_indent::enum_with_text_field::enum_unit
    se::content::tests::with_indent::enum_with_text_field::enum_unit_escaped
    se::content::tests::with_indent::enum_with_text_field::f32_
    se::content::tests::with_indent::enum_with_text_field::f64_
    se::content::tests::with_indent::enum_with_text_field::false_
    se::content::tests::with_indent::enum_with_text_field::i128_
    se::content::tests::with_indent::enum_with_text_field::i16_
    se::content::tests::with_indent::enum_with_text_field::i32_
    se::content::tests::with_indent::enum_with_text_field::i64_
    se::content::tests::with_indent::enum_with_text_field::i8_
    se::content::tests::with_indent::enum_with_text_field::isize_
    se::content::tests::with_indent::enum_with_text_field::newtype
    se::content::tests::with_indent::enum_with_text_field::option_none
    se::content::tests::with_indent::enum_with_text_field::option_some
    se::content::tests::with_indent::enum_with_text_field::option_some_empty_str
    se::content::tests::with_indent::enum_with_text_field::seq
    se::content::tests::with_indent::enum_with_text_field::seq_empty
    se::content::tests::with_indent::enum_with_text_field::str_escaped
    se::content::tests::with_indent::enum_with_text_field::str_non_escaped
    se::content::tests::with_indent::enum_with_text_field::true_
    se::content::tests::with_indent::enum_with_text_field::tuple
    se::content::tests::with_indent::enum_with_text_field::tuple_struct
    se::content::tests::with_indent::enum_with_text_field::u128_
    se::content::tests::with_indent::enum_with_text_field::u16_
    se::content::tests::with_indent::enum_with_text_field::u32_
    se::content::tests::with_indent::enum_with_text_field::u64_
    se::content::tests::with_indent::enum_with_text_field::u8_
    se::content::tests::with_indent::enum_with_text_field::unit
    se::content::tests::with_indent::enum_with_text_field::unit_struct
    se::content::tests::with_indent::enum_with_text_field::unit_struct_escaped
    se::content::tests::with_indent::enum_with_text_field::usize_
    se::content::tests::with_indent::enum_with_value_field::char_amp
    se::content::tests::with_indent::enum_with_value_field::char_apos
    se::content::tests::with_indent::enum_with_value_field::char_gt
    se::content::tests::with_indent::enum_with_value_field::char_lt
    se::content::tests::with_indent::enum_with_value_field::char_non_escaped
    se::content::tests::with_indent::enum_with_value_field::char_quot
    se::content::tests::with_indent::enum_with_value_field::char_space
    se::content::tests::with_indent::enum_with_value_field::f32_
    se::content::tests::with_indent::enum_with_value_field::f64_
    se::content::tests::with_indent::enum_with_value_field::false_
    se::content::tests::with_indent::enum_with_value_field::i128_
    se::content::tests::with_indent::enum_with_value_field::i16_
    se::content::tests::with_indent::enum_with_value_field::i32_
    se::content::tests::with_indent::enum_with_value_field::i64_
    se::content::tests::with_indent::enum_with_value_field::i8_
    se::content::tests::with_indent::enum_with_value_field::isize_
    se::content::tests::with_indent::enum_with_value_field::newtype
    se::content::tests::with_indent::enum_with_value_field::option_none
    se::content::tests::with_indent::enum_with_value_field::option_some
    se::content::tests::with_indent::enum_with_value_field::option_some_empty_str
    se::content::tests::with_indent::enum_with_value_field::seq
    se::content::tests::with_indent::enum_with_value_field::seq_empty
    se::content::tests::with_indent::enum_with_value_field::str_escaped
    se::content::tests::with_indent::enum_with_value_field::str_non_escaped
    se::content::tests::with_indent::enum_with_value_field::true_
    se::content::tests::with_indent::enum_with_value_field::tuple
    se::content::tests::with_indent::enum_with_value_field::tuple_struct
    se::content::tests::with_indent::enum_with_value_field::u128_
    se::content::tests::with_indent::enum_with_value_field::u16_
    se::content::tests::with_indent::enum_with_value_field::u32_
    se::content::tests::with_indent::enum_with_value_field::u64_
    se::content::tests::with_indent::enum_with_value_field::u8_
    se::content::tests::with_indent::enum_with_value_field::usize_
    se::content::tests::with_indent::seq
    se::content::tests::with_indent::text_field::enum_struct
    se::content::tests::with_indent::tuple
    se::content::tests::with_indent::tuple_struct
    se::element::tests::with_indent::text_field::map::char_amp
    se::element::tests::with_indent::text_field::map::char_apos
    se::element::tests::with_indent::text_field::map::char_gt
    se::element::tests::with_indent::text_field::map::char_lt
    se::element::tests::with_indent::text_field::map::char_non_escaped
    se::element::tests::with_indent::text_field::map::char_quot
    se::element::tests::with_indent::text_field::map::char_space
    se::element::tests::with_indent::text_field::map::enum_unit
    se::element::tests::with_indent::text_field::map::enum_unit_escaped
    se::element::tests::with_indent::text_field::map::f32_
    se::element::tests::with_indent::text_field::map::f64_
    se::element::tests::with_indent::text_field::map::false_
    se::element::tests::with_indent::text_field::map::i128_
    se::element::tests::with_indent::text_field::map::i16_
    se::element::tests::with_indent::text_field::map::i32_
    se::element::tests::with_indent::text_field::map::i64_
    se::element::tests::with_indent::text_field::map::i8_
    se::element::tests::with_indent::text_field::map::isize_
    se::element::tests::with_indent::text_field::map::newtype
    se::element::tests::with_indent::text_field::map::option_some
    se::element::tests::with_indent::text_field::map::seq
    se::element::tests::with_indent::text_field::map::str_escaped
    se::element::tests::with_indent::text_field::map::str_non_escaped
    se::element::tests::with_indent::text_field::map::true_
    se::element::tests::with_indent::text_field::map::tuple
    se::element::tests::with_indent::text_field::map::tuple_struct
    se::element::tests::with_indent::text_field::map::u128_
    se::element::tests::with_indent::text_field::map::u16_
    se::element::tests::with_indent::text_field::map::u32_
    se::element::tests::with_indent::text_field::map::u64_
    se::element::tests::with_indent::text_field::map::u8_
    se::element::tests::with_indent::text_field::map::usize_
    se::element::tests::with_indent::text_field::struct_::char_amp
    se::element::tests::with_indent::text_field::struct_::char_apos
    se::element::tests::with_indent::text_field::struct_::char_gt
    se::element::tests::with_indent::text_field::struct_::char_lt
    se::element::tests::with_indent::text_field::struct_::char_non_escaped
    se::element::tests::with_indent::text_field::struct_::char_quot
    se::element::tests::with_indent::text_field::struct_::char_space
    se::element::tests::with_indent::text_field::struct_::enum_unit
    se::element::tests::with_indent::text_field::struct_::enum_unit_escaped
    se::element::tests::with_indent::text_field::struct_::f32_
    se::element::tests::with_indent::text_field::struct_::f64_
    se::element::tests::with_indent::text_field::struct_::false_
    se::element::tests::with_indent::text_field::struct_::i128_
    se::element::tests::with_indent::text_field::struct_::i16_
    se::element::tests::with_indent::text_field::struct_::i32_
    se::element::tests::with_indent::text_field::struct_::i64_
    se::element::tests::with_indent::text_field::struct_::i8_
    se::element::tests::with_indent::text_field::struct_::isize_
    se::element::tests::with_indent::text_field::struct_::newtype
    se::element::tests::with_indent::text_field::struct_::option_none
    se::element::tests::with_indent::text_field::struct_::option_some
    se::element::tests::with_indent::text_field::struct_::option_some_empty_str
    se::element::tests::with_indent::text_field::struct_::seq
    se::element::tests::with_indent::text_field::struct_::seq_empty
    se::element::tests::with_indent::text_field::struct_::str_escaped
    se::element::tests::with_indent::text_field::struct_::str_non_escaped
    se::element::tests::with_indent::text_field::struct_::true_
    se::element::tests::with_indent::text_field::struct_::tuple
    se::element::tests::with_indent::text_field::struct_::tuple_struct
    se::element::tests::with_indent::text_field::struct_::u128_
    se::element::tests::with_indent::text_field::struct_::u16_
    se::element::tests::with_indent::text_field::struct_::u32_
    se::element::tests::with_indent::text_field::struct_::u64_
    se::element::tests::with_indent::text_field::struct_::u8_
    se::element::tests::with_indent::text_field::struct_::unit
    se::element::tests::with_indent::text_field::struct_::unit_struct
    se::element::tests::with_indent::text_field::struct_::unit_struct_escaped
    se::element::tests::with_indent::text_field::struct_::usize_
    se::element::tests::with_indent::value_field::map::char_amp
    se::element::tests::with_indent::value_field::map::char_apos
    se::element::tests::with_indent::value_field::map::char_gt
    se::element::tests::with_indent::value_field::map::char_lt
    se::element::tests::with_indent::value_field::map::char_non_escaped
    se::element::tests::with_indent::value_field::map::char_quot
    se::element::tests::with_indent::value_field::map::char_space
    se::element::tests::with_indent::value_field::map::f32_
    se::element::tests::with_indent::value_field::map::f64_
    se::element::tests::with_indent::value_field::map::false_
    se::element::tests::with_indent::value_field::map::i128_
    se::element::tests::with_indent::value_field::map::i16_
    se::element::tests::with_indent::value_field::map::i32_
    se::element::tests::with_indent::value_field::map::i64_
    se::element::tests::with_indent::value_field::map::i8_
    se::element::tests::with_indent::value_field::map::isize_
    se::element::tests::with_indent::value_field::map::newtype
    se::element::tests::with_indent::value_field::map::option_some
    se::element::tests::with_indent::value_field::map::seq
    se::element::tests::with_indent::value_field::map::str_escaped
    se::element::tests::with_indent::value_field::map::str_non_escaped
    se::element::tests::with_indent::value_field::map::true_
    se::element::tests::with_indent::value_field::map::tuple
    se::element::tests::with_indent::value_field::map::tuple_struct
    se::element::tests::with_indent::value_field::map::u128_
    se::element::tests::with_indent::value_field::map::u16_
    se::element::tests::with_indent::value_field::map::u32_
    se::element::tests::with_indent::value_field::map::u64_
    se::element::tests::with_indent::value_field::map::u8_
    se::element::tests::with_indent::value_field::map::usize_
    se::element::tests::with_indent::value_field::struct_::char_amp
    se::element::tests::with_indent::value_field::struct_::char_apos
    se::element::tests::with_indent::value_field::struct_::char_gt
    se::element::tests::with_indent::value_field::struct_::char_lt
    se::element::tests::with_indent::value_field::struct_::char_non_escaped
    se::element::tests::with_indent::value_field::struct_::char_quot
    se::element::tests::with_indent::value_field::struct_::char_space
    se::element::tests::with_indent::value_field::struct_::f32_
    se::element::tests::with_indent::value_field::struct_::f64_
    se::element::tests::with_indent::value_field::struct_::false_
    se::element::tests::with_indent::value_field::struct_::i128_
    se::element::tests::with_indent::value_field::struct_::i16_
    se::element::tests::with_indent::value_field::struct_::i32_
    se::element::tests::with_indent::value_field::struct_::i64_
    se::element::tests::with_indent::value_field::struct_::i8_
    se::element::tests::with_indent::value_field::struct_::isize_
    se::element::tests::with_indent::value_field::struct_::newtype
    se::element::tests::with_indent::value_field::struct_::option_none
    se::element::tests::with_indent::value_field::struct_::option_some
    se::element::tests::with_indent::value_field::struct_::option_some_empty_str
    se::element::tests::with_indent::value_field::struct_::seq
    se::element::tests::with_indent::value_field::struct_::seq_empty
    se::element::tests::with_indent::value_field::struct_::str_escaped
    se::element::tests::with_indent::value_field::struct_::str_non_escaped
    se::element::tests::with_indent::value_field::struct_::true_
    se::element::tests::with_indent::value_field::struct_::tuple
    se::element::tests::with_indent::value_field::struct_::tuple_struct
    se::element::tests::with_indent::value_field::struct_::u128_
    se::element::tests::with_indent::value_field::struct_::u16_
    se::element::tests::with_indent::value_field::struct_::u32_
    se::element::tests::with_indent::value_field::struct_::u64_
    se::element::tests::with_indent::value_field::struct_::u8_
    se::element::tests::with_indent::value_field::struct_::usize_
@Mingun Mingun added serde Issues related to mapping from Rust types to XML arrays Issues related to mapping XML content onto arrays using serde labels Oct 15, 2024
@Mingun Mingun requested a review from dralley October 15, 2024 19:28
Copy link
Collaborator

@dralley dralley left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Might be helpful to mention the "consequent primitives" caveat in the documentation.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
arrays Issues related to mapping XML content onto arrays using serde serde Issues related to mapping from Rust types to XML
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants