[−][src]Struct serde_pod::ser::Serializer
Структура для сериализации значений Rust в простой поток байт. Внедрение разделителей и любой другой метаинформации для десериализации остается заботой вызывающего кода.
Правила сериализации
Все типы сериализуются максимально близко к тому, как они лежат в памяти: все целые
типы записываются согласно их разрядности (отраженной в названии типа), используя порядок
байт BO
.
Для структур и кортежей рекурсивно сериализуются их поля, без разделителей между ними. Если такие разделители требуются, они должны быть внедрены непосредственно в структуру или кортеж.
Тип ()
, None
-вариант Option
, а также unit-вариант перечисления никак не записываются
в поток, писатель должен самостоятельно позаботится о сохранении информации об их наличии.
Например, для записи С-like перечислений он может использовать вместо enum-поля в структуре
поле одного из примитивных типов.
bool
-значения сериализуются, как 1 байт со значением 0
или 1
.
Newtype типы сериализуются, как оборачиваемое ими значение. При необходимости сохранить маркер типа вызывающий код должен сделать это самостоятельно, например, сериализуя вместо Newtype типа структуру с двумя полями -- маркером типа и значением.
Сериализация строковых срезов выполняется записью в поток UTF-8 кодированного значения,
которая является нативной для Rust и таким образом ведет за собой нулевые накладные расходы на
сериализацию. Записываются только байты самой строки, нулевого байта или длины строки никуда не
добавляется. В случае, если требуется записывать строки в других кодировках, оберните их в
структуры, для которых будет реализован типаж Serialize
, выполняющий сохранение данных в
требуемой кодировке, например, с помощью крейта encoding.
Отдельные символы записываются, как строки из одного символа, в UTF-8. Также как и для строк, нулевой байт в конце символа не записывается.
Сериализация последовательностей и их срезов осуществляется простой последовательной сериализацией их элементов. Ни количество, ни разделители между элементами, ни какой-либо маркер конца последовательности не записываются. В случае, если они требуются для корректной десериализации, они должны быть добавлены в сериализуемые структуры вручную.
Key-value типы сериализуются, как последовательность структур ключ-значение по уже описанным выше правилам. Порядок таких пар определяется сериализуемой структурой.
Параметры типа
BO
: определяет порядок байт, в котором будут записаны примитивные числовые типы:u16
,u32
,u64
,u128
,i16
,i32
,i64
,i128
,f32
иf64
.W
: определяет тип, обеспечивающих сохранение сериализуемых данных в хранилище
Methods
impl<BO, W> Serializer<BO, W> where
W: Write,
BO: ByteOrder,
[src]
W: Write,
BO: ByteOrder,
pub fn new(writer: W) -> Self
[src]
Создает сериализатор с настройками по умолчанию. Строки кодируются в UTF-8, если встречается непредставимый символ, кодирование прерывается и возвращается ошибка
Параметры
writer
: Поток, в который записывать сериализуемые данные
Возвращаемое значение
Сериализатор для записи данных в указанный поток и кодированием строк в UTF-8
Trait Implementations
impl<'a, BO, W> SerializeMap for &'a mut Serializer<BO, W> where
W: Write,
BO: ByteOrder,
[src]
W: Write,
BO: ByteOrder,
type Ok = ()
Must match the Ok
type of our Serializer
.
type Error = Error
Must match the Error
type of our Serializer
.
fn serialize_key<T: ?Sized>(&mut self, key: &T) -> Result<Self::Ok> where
T: Serialize,
[src]
T: Serialize,
Записывает в выходной поток представление key
с помощью данного сериализатора
fn serialize_value<T: ?Sized>(&mut self, value: &T) -> Result<Self::Ok> where
T: Serialize,
[src]
T: Serialize,
Записывает в выходной поток представление value
с помощью данного сериализатора
fn end(self) -> Result<Self::Ok>
[src]
Ничего не записывает в поток
fn serialize_entry<K, V>(
&mut self,
key: &K,
value: &V
) -> Result<(), Self::Error> where
K: Serialize + ?Sized,
V: Serialize + ?Sized,
[src]
&mut self,
key: &K,
value: &V
) -> Result<(), Self::Error> where
K: Serialize + ?Sized,
V: Serialize + ?Sized,
impl<'a, BO, W> SerializeSeq for &'a mut Serializer<BO, W> where
W: Write,
BO: ByteOrder,
[src]
W: Write,
BO: ByteOrder,
type Ok = ()
Must match the Ok
type of our Serializer
.
type Error = Error
Must match the Error
type of our Serializer
.
fn serialize_element<T: ?Sized>(&mut self, value: &T) -> Result<Self::Ok> where
T: Serialize,
[src]
T: Serialize,
Записывает в выходной поток представление value
с помощью данного сериализатора
fn end(self) -> Result<Self::Ok>
[src]
Ничего не записывает в поток
impl<'a, BO, W> SerializeStruct for &'a mut Serializer<BO, W> where
W: Write,
BO: ByteOrder,
[src]
W: Write,
BO: ByteOrder,
type Ok = ()
Must match the Ok
type of our Serializer
.
type Error = Error
Must match the Error
type of our Serializer
.
fn serialize_field<T: ?Sized>(
&mut self,
_key: &'static str,
value: &T
) -> Result<Self::Ok> where
T: Serialize,
[src]
&mut self,
_key: &'static str,
value: &T
) -> Result<Self::Ok> where
T: Serialize,
Записывает в выходной поток представление value
с помощью данного сериализатора
fn end(self) -> Result<Self::Ok>
[src]
Ничего не записывает в поток
fn skip_field(&mut self, key: &'static str) -> Result<(), Self::Error>
[src]
impl<'a, BO, W> SerializeStructVariant for &'a mut Serializer<BO, W> where
W: Write,
BO: ByteOrder,
[src]
W: Write,
BO: ByteOrder,
type Ok = ()
Must match the Ok
type of our Serializer
.
type Error = Error
Must match the Error
type of our Serializer
.
fn serialize_field<T: ?Sized>(
&mut self,
_key: &'static str,
value: &T
) -> Result<Self::Ok> where
T: Serialize,
[src]
&mut self,
_key: &'static str,
value: &T
) -> Result<Self::Ok> where
T: Serialize,
Записывает в выходной поток представление value
с помощью данного сериализатора
fn end(self) -> Result<Self::Ok>
[src]
Ничего не записывает в поток
fn skip_field(&mut self, key: &'static str) -> Result<(), Self::Error>
[src]
impl<'a, BO, W> SerializeTuple for &'a mut Serializer<BO, W> where
W: Write,
BO: ByteOrder,
[src]
W: Write,
BO: ByteOrder,
type Ok = ()
Must match the Ok
type of our Serializer
.
type Error = Error
Must match the Error
type of our Serializer
.
fn serialize_element<T: ?Sized>(&mut self, value: &T) -> Result<Self::Ok> where
T: Serialize,
[src]
T: Serialize,
Записывает в выходной поток представление value
с помощью данного сериализатора
fn end(self) -> Result<Self::Ok>
[src]
Ничего не записывает в поток
impl<'a, BO, W> SerializeTupleStruct for &'a mut Serializer<BO, W> where
W: Write,
BO: ByteOrder,
[src]
W: Write,
BO: ByteOrder,
type Ok = ()
Must match the Ok
type of our Serializer
.
type Error = Error
Must match the Error
type of our Serializer
.
fn serialize_field<T: ?Sized>(&mut self, value: &T) -> Result<Self::Ok> where
T: Serialize,
[src]
T: Serialize,
Записывает в выходной поток представление value
с помощью данного сериализатора
fn end(self) -> Result<Self::Ok>
[src]
Ничего не записывает в поток
impl<'a, BO, W> SerializeTupleVariant for &'a mut Serializer<BO, W> where
W: Write,
BO: ByteOrder,
[src]
W: Write,
BO: ByteOrder,
type Ok = ()
Must match the Ok
type of our Serializer
.
type Error = Error
Must match the Error
type of our Serializer
.
fn serialize_field<T: ?Sized>(&mut self, value: &T) -> Result<Self::Ok> where
T: Serialize,
[src]
T: Serialize,
Записывает в выходной поток представление value
с помощью данного сериализатора
fn end(self) -> Result<Self::Ok>
[src]
Ничего не записывает в поток
impl<'a, BO, W> Serializer for &'a mut Serializer<BO, W> where
W: Write,
BO: ByteOrder,
[src]
W: Write,
BO: ByteOrder,
type Ok = ()
The output type produced by this 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. Read more
type Error = Error
The error type when some error occurs during serialization.
type SerializeSeq = Self
Type returned from [serialize_seq
] for serializing the content of the sequence. Read more
type SerializeTuple = Self
Type returned from [serialize_tuple
] for serializing the content of the tuple. Read more
type SerializeTupleStruct = Self
Type returned from [serialize_tuple_struct
] for serializing the content of the tuple struct. Read more
type SerializeTupleVariant = Self
Type returned from [serialize_tuple_variant
] for serializing the content of the tuple variant. Read more
type SerializeMap = Self
Type returned from [serialize_map
] for serializing the content of the map. Read more
type SerializeStruct = Self
Type returned from [serialize_struct
] for serializing the content of the struct. Read more
type SerializeStructVariant = Self
Type returned from [serialize_struct_variant
] for serializing the content of the struct variant. Read more
fn serialize_i8(self, v: i8) -> Result<Self::Ok>
[src]
Записывает в выходной поток 1 байт
fn serialize_u8(self, v: u8) -> Result<Self::Ok>
[src]
Записывает в выходной поток 1 байт
fn serialize_i16(self, v: i16) -> Result<Self::Ok>
[src]
Записывает в выходной поток 2 байта в указанном в сериализаторе порядке байт
fn serialize_u16(self, v: u16) -> Result<Self::Ok>
[src]
Записывает в выходной поток 2 байта в указанном в сериализаторе порядке байт
fn serialize_i32(self, v: i32) -> Result<Self::Ok>
[src]
Записывает в выходной поток 4 байта в указанном в сериализаторе порядке байт
fn serialize_u32(self, v: u32) -> Result<Self::Ok>
[src]
Записывает в выходной поток 4 байта в указанном в сериализаторе порядке байт
fn serialize_i64(self, v: i64) -> Result<Self::Ok>
[src]
Записывает в выходной поток 8 байт в указанном в сериализаторе порядке байт
fn serialize_u64(self, v: u64) -> Result<Self::Ok>
[src]
Записывает в выходной поток 8 байт в указанном в сериализаторе порядке байт
fn serialize_i128(self, v: i128) -> Result<Self::Ok>
[src]
Записывает в выходной поток 16 байт в указанном в сериализаторе порядке байт
fn serialize_u128(self, v: u128) -> Result<Self::Ok>
[src]
Записывает в выходной поток 16 байт в указанном в сериализаторе порядке байт
fn serialize_f32(self, v: f32) -> Result<Self::Ok>
[src]
Записывает в выходной поток 4 байта в указанном в сериализаторе порядке байт
fn serialize_f64(self, v: f64) -> Result<Self::Ok>
[src]
Записывает в выходной поток 8 байт в указанном в сериализаторе порядке байт
fn serialize_bool(self, v: bool) -> Result<Self::Ok>
[src]
Записывает в выходной поток 1 байт: 0x00
для false
и 0x01
для true
fn serialize_char(self, v: char) -> Result<Self::Ok>
[src]
Записывает в выходной поток UTF-8 байты представления указанного символа
fn serialize_str(self, v: &str) -> Result<Self::Ok>
[src]
Записывает в выходной поток UTF-8 байты представления указанной строки
fn serialize_bytes(self, v: &[u8]) -> Result<Self::Ok>
[src]
Записывает в выходной поток байты указанного массива как есть
fn serialize_none(self) -> Result<Self::Ok>
[src]
Ничего не записывает в поток
fn serialize_some<T: ?Sized>(self, value: &T) -> Result<Self::Ok> where
T: Serialize,
[src]
T: Serialize,
Записывает в выходной поток представление value
с помощью данного сериализатора
fn serialize_unit(self) -> Result<Self::Ok>
[src]
Ничего не записывает в поток
fn serialize_unit_struct(self, _name: &'static str) -> Result<Self::Ok>
[src]
Ничего не записывает в поток
fn serialize_unit_variant(
self,
_name: &'static str,
_variant_index: u32,
_variant: &'static str
) -> Result<Self::Ok>
[src]
self,
_name: &'static str,
_variant_index: u32,
_variant: &'static str
) -> Result<Self::Ok>
Ничего не записывает в поток
fn serialize_newtype_struct<T: ?Sized>(
self,
_name: &'static str,
value: &T
) -> Result<Self::Ok> where
T: Serialize,
[src]
self,
_name: &'static str,
value: &T
) -> Result<Self::Ok> where
T: Serialize,
Записывает в выходной поток представление value
с помощью данного сериализатора
fn serialize_newtype_variant<T: ?Sized>(
self,
_name: &'static str,
_variant_index: u32,
_variant: &'static str,
value: &T
) -> Result<Self::Ok> where
T: Serialize,
[src]
self,
_name: &'static str,
_variant_index: u32,
_variant: &'static str,
value: &T
) -> Result<Self::Ok> where
T: Serialize,
Записывает в выходной поток представление value
с помощью данного сериализатора.
Остальные параметры игнорируются
fn serialize_seq(self, _len: Option<usize>) -> Result<Self::SerializeSeq>
[src]
Просто возвращает данный сериализатор. Параметр _len
игнорируется
fn serialize_tuple(self, _len: usize) -> Result<Self::SerializeTuple>
[src]
Просто возвращает данный сериализатор. Параметр _len
игнорируется
fn serialize_tuple_struct(
self,
_name: &'static str,
_len: usize
) -> Result<Self::SerializeTupleStruct>
[src]
self,
_name: &'static str,
_len: usize
) -> Result<Self::SerializeTupleStruct>
Просто возвращает данный сериализатор. Все параметры игнорируются
fn serialize_tuple_variant(
self,
_name: &'static str,
_variant_index: u32,
_variant: &'static str,
_len: usize
) -> Result<Self::SerializeTupleVariant>
[src]
self,
_name: &'static str,
_variant_index: u32,
_variant: &'static str,
_len: usize
) -> Result<Self::SerializeTupleVariant>
Просто возвращает данный сериализатор. Все параметры игнорируются
fn serialize_map(self, _len: Option<usize>) -> Result<Self::SerializeMap>
[src]
Просто возвращает данный сериализатор. Параметр _len
игнорируется
fn serialize_struct(
self,
_name: &'static str,
_len: usize
) -> Result<Self::SerializeStruct>
[src]
self,
_name: &'static str,
_len: usize
) -> Result<Self::SerializeStruct>
Просто возвращает данный сериализатор. Все параметры игнорируются
fn serialize_struct_variant(
self,
_name: &'static str,
_variant_index: u32,
_variant: &'static str,
_len: usize
) -> Result<Self::SerializeStructVariant>
[src]
self,
_name: &'static str,
_variant_index: u32,
_variant: &'static str,
_len: usize
) -> Result<Self::SerializeStructVariant>
Просто возвращает данный сериализатор. Все параметры игнорируются
fn is_human_readable(&self) -> bool
[src]
Возвращает false
fn collect_seq<I>(self, iter: I) -> Result<Self::Ok, Self::Error> where
I: IntoIterator,
<I as IntoIterator>::Item: Serialize,
[src]
I: IntoIterator,
<I as IntoIterator>::Item: Serialize,
fn collect_map<K, V, I>(self, iter: I) -> Result<Self::Ok, Self::Error> where
I: IntoIterator<Item = (K, V)>,
K: Serialize,
V: Serialize,
[src]
I: IntoIterator<Item = (K, V)>,
K: Serialize,
V: Serialize,
fn collect_str<T>(self, value: &T) -> Result<Self::Ok, Self::Error> where
T: Display + ?Sized,
[src]
T: Display + ?Sized,
Auto Trait Implementations
impl<BO, W> RefUnwindSafe for Serializer<BO, W> where
BO: RefUnwindSafe,
W: RefUnwindSafe,
BO: RefUnwindSafe,
W: RefUnwindSafe,
impl<BO, W> Send for Serializer<BO, W> where
BO: Send,
W: Send,
BO: Send,
W: Send,
impl<BO, W> Sync for Serializer<BO, W> where
BO: Sync,
W: Sync,
BO: Sync,
W: Sync,
impl<BO, W> Unpin for Serializer<BO, W> where
BO: Unpin,
W: Unpin,
BO: Unpin,
W: Unpin,
impl<BO, W> UnwindSafe for Serializer<BO, W> where
BO: UnwindSafe,
W: UnwindSafe,
BO: UnwindSafe,
W: UnwindSafe,
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,