pub struct ElementSerializer<'w, 'k, W: Write> {
pub ser: ContentSerializer<'w, 'k, W>,
pub(super) key: XmlName<'k>,
}Expand description
A serializer used to serialize element with specified name. Unlike the ContentSerializer,
this serializer never uses variant names of enum variants, and because of that
it is unable to serialize any enum values, except unit variants.
This serializer is used for an ordinary fields in structs, which are not special
fields named $text (TEXT_KEY) or $value (VALUE_KEY). $text field
should be serialized using SimpleTypeSerializer and $value field should be
serialized using ContentSerializer.
This serializer does the following:
- numbers converted to a decimal representation and serialized as
<key>value</key>; - booleans serialized ether as
<key>true</key>or<key>false</key>; - strings and characters are serialized as
<key>value</key>. In particular, an empty string is serialized as<key/>; Noneis serialized as<key/>;Someand newtypes are serialized as an inner type using the same serializer;- units (
()) and unit structs are serialized as<key/>; - sequences, tuples and tuple structs are serialized as repeated
<key>tag. In particular, empty sequence is serialized to nothing; - structs are serialized as a sequence of fields wrapped in a
<key>tag. Each field is serialized recursively using eitherElementSerializer,ContentSerializer($valuefields), orSimpleTypeSerializer($textfields). In particular, the empty struct is serialized as<key/>; - maps are serialized as a sequence of entries wrapped in a
<key>tag. If key is serialized to a special name, the same rules as for struct fields are applied. In particular, the empty map is serialized as<key/>; - enums:
- unit variants are serialized as
<key>variant</key>; - other variants are not supported (
DeError::Unsupportedis returned);
- unit variants are serialized as
Usage of empty tags depends on the ContentSerializer::expand_empty_elements setting.
Fields§
§ser: ContentSerializer<'w, 'k, W>The inner serializer that contains the settings and mostly do the actual work
key: XmlName<'k>Tag name used to wrap serialized types except enum variants which uses the variant name
Trait Implementations§
Source§impl<'w, 'k, W: Write> SerializeSeq for ElementSerializer<'w, 'k, W>
impl<'w, 'k, W: Write> SerializeSeq for ElementSerializer<'w, 'k, W>
Source§impl<'w, 'k, W: Write> SerializeTuple for ElementSerializer<'w, 'k, W>
impl<'w, 'k, W: Write> SerializeTuple for ElementSerializer<'w, 'k, W>
Source§impl<'w, 'k, W: Write> SerializeTupleStruct for ElementSerializer<'w, 'k, W>
impl<'w, 'k, W: Write> SerializeTupleStruct for ElementSerializer<'w, 'k, W>
Source§impl<'w, 'k, W: Write> Serializer for ElementSerializer<'w, 'k, W>
impl<'w, 'k, W: Write> Serializer for ElementSerializer<'w, 'k, W>
Source§fn serialize_none(self) -> Result<Self::Ok, Self::Error>
fn serialize_none(self) -> Result<Self::Ok, Self::Error>
By serde contract we should serialize key of None values. If someone
wants to skip the field entirely, he should use
#[serde(skip_serializing_if = "Option::is_none")].
In XML when we serialize field, we write field name as:
- element name, or
- attribute name
and field value as
- content of the element, or
- attribute value
So serialization of None works the same as serialization of ()
Source§fn serialize_unit_variant(
self,
name: &'static str,
variant_index: u32,
variant: &'static str,
) -> Result<Self::Ok, Self::Error>
fn serialize_unit_variant( self, name: &'static str, variant_index: u32, variant: &'static str, ) -> Result<Self::Ok, Self::Error>
Writes a tag with name Self::key and content of unit variant inside.
If variant is a special $text value, then empty tag <key/> is written.
Otherwise a <key>variant</key> is written.
Source§fn serialize_newtype_variant<T: ?Sized + Serialize>(
self,
name: &'static str,
_variant_index: u32,
variant: &'static str,
_value: &T,
) -> Result<Self::Ok, Self::Error>
fn serialize_newtype_variant<T: ?Sized + Serialize>( self, name: &'static str, _variant_index: u32, variant: &'static str, _value: &T, ) -> Result<Self::Ok, Self::Error>
Always returns DeError::Unsupported. Newtype variants can be serialized
only in $value fields, which is serialized using ContentSerializer.
Source§fn serialize_tuple_variant(
self,
name: &'static str,
_variant_index: u32,
variant: &'static str,
_len: usize,
) -> Result<Self::SerializeTupleVariant, Self::Error>
fn serialize_tuple_variant( self, name: &'static str, _variant_index: u32, variant: &'static str, _len: usize, ) -> Result<Self::SerializeTupleVariant, Self::Error>
Always returns DeError::Unsupported. Tuple variants can be serialized
only in $value fields, which is serialized using ContentSerializer.
Source§fn serialize_struct_variant(
self,
name: &'static str,
_variant_index: u32,
variant: &'static str,
_len: usize,
) -> Result<Self::SerializeStructVariant, Self::Error>
fn serialize_struct_variant( self, name: &'static str, _variant_index: u32, variant: &'static str, _len: usize, ) -> Result<Self::SerializeStructVariant, Self::Error>
Always returns DeError::Unsupported. Struct variants can be serialized
only in $value fields, which is serialized using ContentSerializer.
Source§type Ok = ()
type Ok = ()
Serializer during successful
serialization. Most serializers that produce text or binary output
should set Ok = () and serialize into an io::Write or buffer
contained within the Serializer instance. Serializers that build
in-memory data structures may be simplified by using Ok to propagate
the data structure around.Source§type SerializeSeq = ElementSerializer<'w, 'k, W>
type SerializeSeq = ElementSerializer<'w, 'k, W>
serialize_seq for serializing the content of the
sequence.Source§type SerializeTuple = ElementSerializer<'w, 'k, W>
type SerializeTuple = ElementSerializer<'w, 'k, W>
serialize_tuple for serializing the content of
the tuple.Source§type SerializeTupleStruct = ElementSerializer<'w, 'k, W>
type SerializeTupleStruct = ElementSerializer<'w, 'k, W>
serialize_tuple_struct for serializing the
content of the tuple struct.Source§type SerializeTupleVariant = Impossible<<ElementSerializer<'w, 'k, W> as Serializer>::Ok, <ElementSerializer<'w, 'k, W> as Serializer>::Error>
type SerializeTupleVariant = Impossible<<ElementSerializer<'w, 'k, W> as Serializer>::Ok, <ElementSerializer<'w, 'k, W> as Serializer>::Error>
serialize_tuple_variant for serializing the
content of the tuple variant.Source§type SerializeMap = Map<'w, 'k, W>
type SerializeMap = Map<'w, 'k, W>
serialize_map for serializing the content of the
map.Source§type SerializeStruct = Struct<'w, 'k, W>
type SerializeStruct = Struct<'w, 'k, W>
serialize_struct for serializing the content of
the struct.Source§type SerializeStructVariant = Struct<'w, 'k, W>
type SerializeStructVariant = Struct<'w, 'k, W>
serialize_struct_variant for serializing the
content of the struct variant.Source§fn serialize_bool(self, value: bool) -> Result<Self::Ok, Self::Error>
fn serialize_bool(self, value: bool) -> Result<Self::Ok, Self::Error>
bool value. Read moreSource§fn serialize_i8(self, value: i8) -> Result<Self::Ok, Self::Error>
fn serialize_i8(self, value: i8) -> Result<Self::Ok, Self::Error>
i8 value. Read moreSource§fn serialize_i16(self, value: i16) -> Result<Self::Ok, Self::Error>
fn serialize_i16(self, value: i16) -> Result<Self::Ok, Self::Error>
i16 value. Read moreSource§fn serialize_i32(self, value: i32) -> Result<Self::Ok, Self::Error>
fn serialize_i32(self, value: i32) -> Result<Self::Ok, Self::Error>
i32 value. Read moreSource§fn serialize_i64(self, value: i64) -> Result<Self::Ok, Self::Error>
fn serialize_i64(self, value: i64) -> Result<Self::Ok, Self::Error>
i64 value. Read moreSource§fn serialize_u8(self, value: u8) -> Result<Self::Ok, Self::Error>
fn serialize_u8(self, value: u8) -> Result<Self::Ok, Self::Error>
u8 value. Read moreSource§fn serialize_u16(self, value: u16) -> Result<Self::Ok, Self::Error>
fn serialize_u16(self, value: u16) -> Result<Self::Ok, Self::Error>
u16 value. Read moreSource§fn serialize_u32(self, value: u32) -> Result<Self::Ok, Self::Error>
fn serialize_u32(self, value: u32) -> Result<Self::Ok, Self::Error>
u32 value. Read moreSource§fn serialize_u64(self, value: u64) -> Result<Self::Ok, Self::Error>
fn serialize_u64(self, value: u64) -> Result<Self::Ok, Self::Error>
u64 value. Read moreSource§fn serialize_i128(self, value: i128) -> Result<Self::Ok, Self::Error>
fn serialize_i128(self, value: i128) -> Result<Self::Ok, Self::Error>
i128 value. Read moreSource§fn serialize_u128(self, value: u128) -> Result<Self::Ok, Self::Error>
fn serialize_u128(self, value: u128) -> Result<Self::Ok, Self::Error>
u128 value. Read moreSource§fn serialize_f32(self, value: f32) -> Result<Self::Ok, Self::Error>
fn serialize_f32(self, value: f32) -> Result<Self::Ok, Self::Error>
f32 value. Read moreSource§fn serialize_f64(self, value: f64) -> Result<Self::Ok, Self::Error>
fn serialize_f64(self, value: f64) -> Result<Self::Ok, Self::Error>
f64 value. Read moreSource§fn serialize_char(self, value: char) -> Result<Self::Ok, Self::Error>
fn serialize_char(self, value: char) -> Result<Self::Ok, Self::Error>
Source§fn serialize_bytes(self, value: &[u8]) -> Result<Self::Ok, Self::Error>
fn serialize_bytes(self, value: &[u8]) -> Result<Self::Ok, Self::Error>
Source§fn serialize_str(self, value: &str) -> Result<Self::Ok, Self::Error>
fn serialize_str(self, value: &str) -> Result<Self::Ok, Self::Error>
&str. Read moreSource§fn serialize_some<T: ?Sized + Serialize>(
self,
value: &T,
) -> Result<Self::Ok, Self::Error>
fn serialize_some<T: ?Sized + Serialize>( self, value: &T, ) -> Result<Self::Ok, Self::Error>
Source§fn serialize_newtype_struct<T: ?Sized + Serialize>(
self,
_name: &'static str,
value: &T,
) -> Result<Self::Ok, Self::Error>
fn serialize_newtype_struct<T: ?Sized + Serialize>( self, _name: &'static str, value: &T, ) -> Result<Self::Ok, Self::Error>
struct Millimeters(u8). Read moreSource§fn serialize_seq(
self,
_len: Option<usize>,
) -> Result<Self::SerializeSeq, Self::Error>
fn serialize_seq( self, _len: Option<usize>, ) -> Result<Self::SerializeSeq, Self::Error>
serialize_element, then a call to
end. Read moreSource§fn serialize_tuple(
self,
len: usize,
) -> Result<Self::SerializeTuple, Self::Error>
fn serialize_tuple( self, len: usize, ) -> Result<Self::SerializeTuple, Self::Error>
serialize_element,
then a call to end. Read moreSource§fn serialize_tuple_struct(
self,
_name: &'static str,
len: usize,
) -> Result<Self::SerializeTupleStruct, Self::Error>
fn serialize_tuple_struct( self, _name: &'static str, len: usize, ) -> Result<Self::SerializeTupleStruct, Self::Error>
struct Rgb(u8, u8, u8). This
call must be followed by zero or more calls to serialize_field, then a
call to end. Read moreSource§fn serialize_map(
self,
_len: Option<usize>,
) -> Result<Self::SerializeMap, Self::Error>
fn serialize_map( self, _len: Option<usize>, ) -> Result<Self::SerializeMap, Self::Error>
serialize_key and serialize_value, then a call to end. Read moreSource§fn serialize_struct(
self,
_name: &'static str,
_len: usize,
) -> Result<Self::SerializeStruct, Self::Error>
fn serialize_struct( self, _name: &'static str, _len: usize, ) -> Result<Self::SerializeStruct, Self::Error>
struct Rgb { r: u8, g: u8, b: u8 }.
This call must be followed by zero or more calls to serialize_field,
then a call to end. Read moreSource§fn collect_seq<I>(self, iter: I) -> Result<Self::Ok, Self::Error>
fn collect_seq<I>(self, iter: I) -> Result<Self::Ok, Self::Error>
Source§fn collect_map<K, V, I>(self, iter: I) -> Result<Self::Ok, Self::Error>
fn collect_map<K, V, I>(self, iter: I) -> Result<Self::Ok, Self::Error>
Source§fn collect_str<T>(self, value: &T) -> Result<Self::Ok, Self::Error>
fn collect_str<T>(self, value: &T) -> Result<Self::Ok, Self::Error>
Display. Read moreSource§fn is_human_readable(&self) -> bool
fn is_human_readable(&self) -> bool
Serialize implementations should serialize in
human-readable form. Read more