changelog shortlog graph tags branches changeset files file revisions raw help

Mercurial > core / annotate rust/lib/sxp/src/ser.rs

changeset 698: 96958d3eb5b0
parent: 0ccbbd142694
author: Richard Westhaver <ellis@rwest.io>
date: Fri, 04 Oct 2024 22:04:59 -0400
permissions: -rw-r--r--
description: fixes
8
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1
 //! ser.rs --- SXP Serializer
67
0ccbbd142694 rust cleanup, added rocksdb bindings
ellis <ellis@rwest.io>
parents: 8
diff changeset
2
 use crate::{
0ccbbd142694 rust cleanup, added rocksdb bindings
ellis <ellis@rwest.io>
parents: 8
diff changeset
3
   err::ErrorCode,
0ccbbd142694 rust cleanup, added rocksdb bindings
ellis <ellis@rwest.io>
parents: 8
diff changeset
4
   fmt::{DefaultFormatter, WriteFormatter},
0ccbbd142694 rust cleanup, added rocksdb bindings
ellis <ellis@rwest.io>
parents: 8
diff changeset
5
   tok::{format_escaped_str, format_escaped_str_contents},
0ccbbd142694 rust cleanup, added rocksdb bindings
ellis <ellis@rwest.io>
parents: 8
diff changeset
6
   Error, Result,
0ccbbd142694 rust cleanup, added rocksdb bindings
ellis <ellis@rwest.io>
parents: 8
diff changeset
7
 };
0ccbbd142694 rust cleanup, added rocksdb bindings
ellis <ellis@rwest.io>
parents: 8
diff changeset
8
 use core::{
0ccbbd142694 rust cleanup, added rocksdb bindings
ellis <ellis@rwest.io>
parents: 8
diff changeset
9
   fmt::{self, Display},
0ccbbd142694 rust cleanup, added rocksdb bindings
ellis <ellis@rwest.io>
parents: 8
diff changeset
10
   num::FpCategory,
0ccbbd142694 rust cleanup, added rocksdb bindings
ellis <ellis@rwest.io>
parents: 8
diff changeset
11
 };
8
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
12
 use serde::ser::{self, Impossible, Serialize};
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
13
 use std::io::{self, Write};
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
14
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
15
 #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
16
 pub fn to_writer<W: Write, S: ?Sized + Serialize>(
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
17
   writer: W,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
18
   value: &S,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
19
 ) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
20
   let mut ser = Serializer::new(writer);
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
21
   value.serialize(&mut ser)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
22
 }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
23
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
24
 /// Serialize the given data structure as a canonical SXP byte vector.
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
25
 #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
26
 pub fn to_vec<S: ?Sized + Serialize>(value: &S) -> Result<Vec<u8>> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
27
   let mut writer = Vec::with_capacity(128);
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
28
   e!(to_writer(&mut writer, value));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
29
   Ok(writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
30
 }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
31
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
32
 #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
33
 pub fn to_string<S: ?Sized + Serialize>(value: &S) -> Result<String> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
34
   let mut writer = Vec::new(); // TODO: with-capacity 128? bench
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
35
   to_writer(&mut writer, value)?;
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
36
   // We then check that the serialized string is the same as what we expect
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
37
   let string = unsafe { String::from_utf8_unchecked(writer) };
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
38
   Ok(string)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
39
 }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
40
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
41
 pub struct Serializer<W, F = DefaultFormatter> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
42
   writer: W,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
43
   formatter: F,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
44
 }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
45
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
46
 impl<W: Write> Serializer<W> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
47
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
48
   fn new(writer: W) -> Self {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
49
     Serializer::with_formatter(writer, DefaultFormatter)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
50
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
51
 }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
52
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
53
 impl<W: Write, F: WriteFormatter> Serializer<W, F> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
54
   fn with_formatter(writer: W, formatter: F) -> Self {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
55
     Serializer { writer, formatter }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
56
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
57
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
58
   pub fn into_inner(self) -> W {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
59
     self.writer
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
60
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
61
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
62
   pub fn serialize_symbol(&mut self, value: &str) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
63
     self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
64
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
65
       .write_symbol(&mut self.writer, value)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
66
       .map_err(Error::io)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
67
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
68
 }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
69
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
70
 // impl<'a, W:Write> Serializer<W, PrettyFormatter<'a>> {...}
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
71
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
72
 impl<'ser, W: Write, F: WriteFormatter> serde::ser::Serializer
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
73
   for &'ser mut Serializer<W, F>
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
74
 {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
75
   type Ok = (); // could be usize for bytes written
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
76
   type Error = Error;
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
77
   type SerializeSeq = Seq<'ser, W, F>;
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
78
   type SerializeTuple = Seq<'ser, W, F>;
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
79
   type SerializeTupleStruct = Seq<'ser, W, F>;
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
80
   type SerializeTupleVariant = Seq<'ser, W, F>;
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
81
   type SerializeMap = Seq<'ser, W, F>;
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
82
   type SerializeStruct = Seq<'ser, W, F>;
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
83
   type SerializeStructVariant = Seq<'ser, W, F>;
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
84
   // TODO
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
85
   fn serialize_bool(self, v: bool) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
86
     self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
87
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
88
       .write_bool(&mut self.writer, v)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
89
       .map_err(Error::io)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
90
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
91
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
92
   fn serialize_i8(self, value: i8) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
93
     self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
94
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
95
       .write_i8(&mut self.writer, value)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
96
       .map_err(Error::io)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
97
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
98
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
99
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
100
   fn serialize_i16(self, value: i16) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
101
     self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
102
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
103
       .write_i16(&mut self.writer, value)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
104
       .map_err(Error::io)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
105
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
106
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
107
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
108
   fn serialize_i32(self, value: i32) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
109
     self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
110
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
111
       .write_i32(&mut self.writer, value)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
112
       .map_err(Error::io)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
113
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
114
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
115
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
116
   fn serialize_i64(self, value: i64) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
117
     self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
118
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
119
       .write_i64(&mut self.writer, value)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
120
       .map_err(Error::io)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
121
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
122
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
123
   fn serialize_i128(self, value: i128) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
124
     self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
125
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
126
       .write_i128(&mut self.writer, value)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
127
       .map_err(Error::io)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
128
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
129
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
130
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
131
   fn serialize_u8(self, value: u8) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
132
     self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
133
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
134
       .write_u8(&mut self.writer, value)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
135
       .map_err(Error::io)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
136
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
137
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
138
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
139
   fn serialize_u16(self, value: u16) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
140
     self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
141
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
142
       .write_u16(&mut self.writer, value)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
143
       .map_err(Error::io)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
144
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
145
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
146
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
147
   fn serialize_u32(self, value: u32) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
148
     self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
149
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
150
       .write_u32(&mut self.writer, value)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
151
       .map_err(Error::io)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
152
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
153
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
154
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
155
   fn serialize_u64(self, value: u64) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
156
     self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
157
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
158
       .write_u64(&mut self.writer, value)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
159
       .map_err(Error::io)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
160
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
161
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
162
   fn serialize_u128(self, value: u128) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
163
     self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
164
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
165
       .write_u128(&mut self.writer, value)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
166
       .map_err(Error::io)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
167
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
168
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
169
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
170
   fn serialize_f32(self, value: f32) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
171
     match value.classify() {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
172
       // TODO
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
173
       FpCategory::Nan | FpCategory::Infinite => self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
174
         .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
175
         .write_nil(&mut self.writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
176
         .map_err(Error::io),
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
177
       _ => self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
178
         .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
179
         .write_f32(&mut self.writer, value)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
180
         .map_err(Error::io),
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
181
     }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
182
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
183
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
184
   fn serialize_f64(self, value: f64) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
185
     match value.classify() {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
186
       FpCategory::Nan | FpCategory::Infinite => self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
187
         .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
188
         .write_nil(&mut self.writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
189
         .map_err(Error::io),
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
190
       _ => self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
191
         .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
192
         .write_f64(&mut self.writer, value)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
193
         .map_err(Error::io),
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
194
     }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
195
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
196
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
197
   fn serialize_char(self, value: char) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
198
     // A char encoded as UTF-8 takes 4 bytes at most.
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
199
     let mut buf = [0; 4];
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
200
     self.serialize_str(value.encode_utf8(&mut buf))
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
201
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
202
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
203
   fn serialize_str(self, value: &str) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
204
     format_escaped_str(&mut self.writer, &mut self.formatter, value)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
205
       .map_err(Error::io)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
206
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
207
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
208
   fn serialize_bytes(self, value: &[u8]) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
209
     use serde::ser::SerializeSeq;
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
210
     let mut seq = e!(self.serialize_seq(Some(value.len())));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
211
     for byte in value {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
212
       e!(seq.serialize_element(byte));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
213
     }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
214
     seq.end()
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
215
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
216
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
217
   fn serialize_unit(self) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
218
     self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
219
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
220
       .write_nil(&mut self.writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
221
       .map_err(Error::io)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
222
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
223
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
224
   fn serialize_unit_struct(self, _name: &'static str) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
225
     self.serialize_unit()
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
226
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
227
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
228
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
229
   fn serialize_unit_variant(
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
230
     self,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
231
     _name: &'static str,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
232
     _variant_index: u32,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
233
     variant: &'static str,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
234
   ) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
235
     self.serialize_symbol(variant)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
236
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
237
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
238
   /// Serialize newtypes without an object wrapper.
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
239
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
240
   fn serialize_newtype_struct<T>(
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
241
     self,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
242
     _name: &'static str,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
243
     value: &T,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
244
   ) -> Result<()>
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
245
   where
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
246
     T: ?Sized + Serialize,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
247
   {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
248
     value.serialize(self)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
249
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
250
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
251
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
252
   fn serialize_newtype_variant<T>(
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
253
     self,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
254
     _name: &'static str,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
255
     _variant_index: u32,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
256
     variant: &'static str,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
257
     value: &T,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
258
   ) -> Result<()>
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
259
   where
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
260
     T: ?Sized + Serialize,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
261
   {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
262
     e!(self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
263
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
264
       .begin_list(&mut self.writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
265
       .map_err(Error::io));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
266
     e!(self.serialize_symbol(variant));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
267
     // e!(self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
268
     //     .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
269
     //     .end_object_key(&mut self.writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
270
     //     .map_err(|e| e.into()));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
271
     // e!(self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
272
     //     .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
273
     //     .begin_object_value(&mut self.writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
274
     //     .map_err(|e| e.into()));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
275
     e!(self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
276
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
277
       .begin_list_element(&mut self.writer, false)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
278
       .map_err(Error::io));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
279
     e!(value.serialize(&mut *self));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
280
     // e!(self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
281
     //     .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
282
     //     .end_object_value(&mut self.writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
283
     //     .map_err(|e| e.into()));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
284
     self.formatter.end_list(&mut self.writer).map_err(Error::io)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
285
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
286
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
287
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
288
   fn serialize_none(self) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
289
     self.serialize_unit()
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
290
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
291
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
292
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
293
   fn serialize_some<T>(self, value: &T) -> Result<()>
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
294
   where
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
295
     T: ?Sized + Serialize,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
296
   {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
297
     value.serialize(self)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
298
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
299
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
300
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
301
   fn serialize_seq(self, len: Option<usize>) -> Result<Self::SerializeSeq> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
302
     // TODO: impl nil for seq of 0 length?
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
303
     e!(self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
304
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
305
       .begin_list(&mut self.writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
306
       .map_err(Error::io));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
307
     if len == Some(0) {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
308
       e!(self.formatter.end_list(&mut self.writer).map_err(Error::io));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
309
       Ok(Seq {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
310
         ser: self,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
311
         state: State::Nil,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
312
       })
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
313
     } else {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
314
       Ok(Seq {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
315
         ser: self,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
316
         state: State::Car,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
317
       })
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
318
     }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
319
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
320
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
321
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
322
   fn serialize_tuple(self, len: usize) -> Result<Self::SerializeTuple> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
323
     self.serialize_seq(Some(len))
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
324
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
325
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
326
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
327
   fn serialize_tuple_struct(
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
328
     self,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
329
     _name: &'static str,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
330
     len: usize,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
331
   ) -> Result<Self::SerializeTupleStruct> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
332
     self.serialize_seq(Some(len))
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
333
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
334
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
335
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
336
   fn serialize_tuple_variant(
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
337
     self,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
338
     _name: &'static str,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
339
     _variant_index: u32,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
340
     variant: &'static str,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
341
     len: usize,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
342
   ) -> Result<Self::SerializeTupleVariant> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
343
     e!(self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
344
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
345
       .begin_list(&mut self.writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
346
       .map_err(Error::io));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
347
     e!(self.serialize_symbol(variant));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
348
     // e!(self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
349
     //     .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
350
     //     .end_object_key(&mut self.writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
351
     //     .map_err(|e| e.into()));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
352
     // e!(self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
353
     //     .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
354
     //     .begin_object_value(&mut self.writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
355
     //     .map_err(|e| e.into()));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
356
     e!(self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
357
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
358
       .begin_list_element(&mut self.writer, false)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
359
       .map_err(Error::io));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
360
     self.serialize_seq(Some(len))
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
361
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
362
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
363
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
364
   fn serialize_map(self, len: Option<usize>) -> Result<Self::SerializeMap> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
365
     e!(self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
366
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
367
       .begin_list(&mut self.writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
368
       .map_err(Error::io));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
369
     if len == Some(0) {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
370
       e!(self.formatter.end_list(&mut self.writer).map_err(Error::io));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
371
       Ok(Seq {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
372
         ser: self,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
373
         state: State::Nil,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
374
       })
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
375
     } else {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
376
       Ok(Seq {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
377
         ser: self,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
378
         state: State::Car,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
379
       })
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
380
     }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
381
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
382
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
383
   // TODO: include struct name?
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
384
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
385
   fn serialize_struct(
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
386
     self,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
387
     _name: &'static str,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
388
     len: usize,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
389
   ) -> Result<Self::SerializeStruct> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
390
     self.serialize_map(Some(len))
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
391
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
392
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
393
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
394
   fn serialize_struct_variant(
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
395
     self,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
396
     _name: &'static str,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
397
     _variant_index: u32,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
398
     variant: &'static str,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
399
     len: usize,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
400
   ) -> Result<Self::SerializeStructVariant> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
401
     e!(self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
402
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
403
       .begin_list(&mut self.writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
404
       .map_err(Error::io));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
405
     e!(self.serialize_symbol(variant));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
406
     e!(self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
407
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
408
       .begin_list_element(&mut self.writer, false)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
409
       .map_err(Error::io));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
410
     // e!(self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
411
     //     .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
412
     //     .end_object_key(&mut self.writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
413
     //     .map_err(|e| e.into()));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
414
     // e!(self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
415
     //     .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
416
     //     .begin_object_value(&mut self.writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
417
     //     .map_err(|e| e.into()));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
418
     self.serialize_map(Some(len))
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
419
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
420
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
421
   fn collect_str<T>(self, value: &T) -> Result<()>
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
422
   where
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
423
     T: ?Sized + Display,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
424
   {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
425
     use self::fmt::Write;
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
426
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
427
     struct Adapter<'ser, W: 'ser, F: 'ser> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
428
       writer: &'ser mut W,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
429
       formatter: &'ser mut F,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
430
       error: Option<io::Error>,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
431
     }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
432
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
433
     impl<'ser, W, F> Write for Adapter<'ser, W, F>
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
434
     where
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
435
       W: io::Write,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
436
       F: WriteFormatter,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
437
     {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
438
       fn write_str(&mut self, s: &str) -> fmt::Result {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
439
         debug_assert!(self.error.is_none());
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
440
         match format_escaped_str_contents(self.writer, self.formatter, s) {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
441
           Ok(()) => Ok(()),
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
442
           Err(err) => {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
443
             self.error = Some(err);
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
444
             Err(fmt::Error)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
445
           }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
446
         }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
447
       }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
448
     }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
449
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
450
     e!(self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
451
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
452
       .begin_string(&mut self.writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
453
       .map_err(Error::io));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
454
     {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
455
       let mut adapter = Adapter {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
456
         writer: &mut self.writer,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
457
         formatter: &mut self.formatter,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
458
         error: None,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
459
       };
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
460
       match write!(adapter, "{}", value) {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
461
         Ok(()) => debug_assert!(adapter.error.is_none()),
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
462
         Err(_) => {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
463
           return Err(Error::io(
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
464
             adapter.error.expect("there should be an error"),
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
465
           ));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
466
         }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
467
       }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
468
     }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
469
     self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
470
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
471
       .end_string(&mut self.writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
472
       .map_err(Error::io)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
473
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
474
 }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
475
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
476
 // Not public API. Should be pub(crate).
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
477
 #[doc(hidden)]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
478
 #[derive(Eq, PartialEq)]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
479
 pub enum State {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
480
   Nil,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
481
   Car,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
482
   Cdr,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
483
 }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
484
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
485
 pub struct Seq<'a, W: 'a, F: 'a> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
486
   ser: &'a mut Serializer<W, F>,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
487
   state: State,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
488
 }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
489
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
490
 impl<'ser, W: Write, F: WriteFormatter> ser::SerializeSeq for Seq<'ser, W, F> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
491
   type Ok = ();
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
492
   type Error = Error;
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
493
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
494
   fn serialize_element<T: ?Sized + Serialize>(
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
495
     &mut self,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
496
     value: &T,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
497
   ) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
498
     let ser = &mut self.ser;
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
499
     e!(ser
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
500
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
501
       .begin_list_element(&mut ser.writer, self.state == State::Car)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
502
       .map_err(Error::io));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
503
     self.state = State::Cdr;
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
504
     e!(value.serialize(&mut **ser));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
505
     ser
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
506
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
507
       .end_list_element(&mut ser.writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
508
       .map_err(Error::io)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
509
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
510
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
511
   fn end(self) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
512
     match self.state {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
513
       State::Nil => Ok(()),
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
514
       _ => self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
515
         .ser
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
516
         .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
517
         .end_list(&mut self.ser.writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
518
         .map_err(Error::io),
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
519
     }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
520
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
521
 }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
522
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
523
 impl<'ser, W: Write, F: WriteFormatter> ser::SerializeTuple
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
524
   for Seq<'ser, W, F>
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
525
 {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
526
   type Ok = ();
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
527
   type Error = Error;
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
528
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
529
   fn serialize_element<S: ?Sized + Serialize>(
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
530
     &mut self,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
531
     value: &S,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
532
   ) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
533
     ser::SerializeSeq::serialize_element(self, value)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
534
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
535
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
536
   fn end(self) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
537
     ser::SerializeSeq::end(self)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
538
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
539
 }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
540
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
541
 impl<'a, W, F> ser::SerializeTupleStruct for Seq<'a, W, F>
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
542
 where
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
543
   W: io::Write,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
544
   F: WriteFormatter,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
545
 {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
546
   type Ok = ();
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
547
   type Error = Error;
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
548
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
549
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
550
   fn serialize_field<T>(&mut self, value: &T) -> Result<()>
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
551
   where
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
552
     T: ?Sized + Serialize,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
553
   {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
554
     ser::SerializeSeq::serialize_element(self, value)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
555
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
556
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
557
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
558
   fn end(self) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
559
     match self.state {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
560
       State::Nil => Ok(()),
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
561
       _ => self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
562
         .ser
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
563
         .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
564
         .end_list(&mut self.ser.writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
565
         .map_err(Error::io),
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
566
     }?;
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
567
     self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
568
       .ser
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
569
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
570
       .end_list(&mut self.ser.writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
571
       .map_err(Error::io)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
572
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
573
 }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
574
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
575
 impl<'a, W, F> ser::SerializeTupleVariant for Seq<'a, W, F>
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
576
 where
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
577
   W: io::Write,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
578
   F: WriteFormatter,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
579
 {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
580
   type Ok = ();
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
581
   type Error = Error;
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
582
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
583
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
584
   fn serialize_field<T>(&mut self, value: &T) -> Result<()>
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
585
   where
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
586
     T: ?Sized + Serialize,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
587
   {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
588
     ser::SerializeSeq::serialize_element(self, value)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
589
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
590
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
591
   //  TODO 2023-07-09: this don't feel right
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
592
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
593
   fn end(self) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
594
     e!(self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
595
       .ser
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
596
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
597
       .end_list(&mut self.ser.writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
598
       .map_err(Error::io));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
599
     ser::SerializeSeq::end(self)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
600
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
601
 }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
602
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
603
 impl<'a, W, F> ser::SerializeMap for Seq<'a, W, F>
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
604
 where
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
605
   W: io::Write,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
606
   F: WriteFormatter,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
607
 {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
608
   type Ok = ();
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
609
   type Error = Error;
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
610
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
611
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
612
   fn serialize_key<T>(&mut self, key: &T) -> Result<()>
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
613
   where
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
614
     T: ?Sized + Serialize,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
615
   {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
616
     let ser = &mut self.ser;
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
617
     e!(ser
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
618
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
619
       .begin_list_element(&mut ser.writer, self.state == State::Car)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
620
       .map_err(Error::io));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
621
     self.state = State::Cdr;
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
622
     e!(ser.formatter.begin_key(&mut ser.writer).map_err(Error::io));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
623
     key.serialize(SymbolSerializer(*ser))
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
624
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
625
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
626
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
627
   fn serialize_value<T>(&mut self, value: &T) -> Result<()>
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
628
   where
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
629
     T: ?Sized + Serialize,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
630
   {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
631
     let ser = &mut self.ser;
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
632
     e!(ser
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
633
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
634
       .begin_list_element(&mut ser.writer, false)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
635
       .map_err(Error::io));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
636
     e!(value.serialize(&mut **ser));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
637
     ser
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
638
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
639
       .end_list_element(&mut ser.writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
640
       .map_err(Error::io)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
641
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
642
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
643
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
644
   fn end(self) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
645
     self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
646
       .ser
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
647
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
648
       .end_list(&mut self.ser.writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
649
       .map_err(Error::io)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
650
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
651
 }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
652
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
653
 impl<'a, W, F> ser::SerializeStruct for Seq<'a, W, F>
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
654
 where
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
655
   W: io::Write,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
656
   F: WriteFormatter,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
657
 {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
658
   type Ok = ();
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
659
   type Error = Error;
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
660
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
661
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
662
   fn serialize_field<T>(&mut self, key: &'static str, value: &T) -> Result<()>
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
663
   where
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
664
     T: ?Sized + Serialize,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
665
   {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
666
     ser::SerializeMap::serialize_entry(self, key, value)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
667
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
668
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
669
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
670
   fn end(self) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
671
     ser::SerializeMap::end(self)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
672
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
673
 }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
674
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
675
 impl<'a, W, F> ser::SerializeStructVariant for Seq<'a, W, F>
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
676
 where
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
677
   W: io::Write,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
678
   F: WriteFormatter,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
679
 {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
680
   type Ok = ();
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
681
   type Error = Error;
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
682
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
683
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
684
   fn serialize_field<T>(&mut self, key: &'static str, value: &T) -> Result<()>
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
685
   where
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
686
     T: ?Sized + Serialize,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
687
   {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
688
     e!(self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
689
       .ser
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
690
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
691
       .begin_key(&mut self.ser.writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
692
       .map_err(Error::io));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
693
     e!(self.ser.serialize_symbol(key));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
694
     e!(self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
695
       .ser
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
696
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
697
       .begin_list_element(&mut self.ser.writer, false)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
698
       .map_err(Error::io));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
699
     value.serialize(&mut *self.ser)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
700
     //ser::SerializeMap::serialize_entry(self, key, value)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
701
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
702
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
703
   fn end(self) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
704
     match self.state {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
705
       State::Nil => (),
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
706
       _ => e!(self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
707
         .ser
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
708
         .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
709
         .end_list(&mut self.ser.writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
710
         .map_err(Error::io)),
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
711
     };
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
712
     self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
713
       .ser
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
714
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
715
       .end_list(&mut self.ser.writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
716
       .map_err(Error::io)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
717
     // ser::SerializeMap::end(self)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
718
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
719
 }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
720
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
721
 fn key_sym_error() -> Error {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
722
   Error::syntax(ErrorCode::KeyMustBeASymbol, 0, 0)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
723
 }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
724
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
725
 struct SymbolSerializer<'a, W: 'a, F: 'a>(&'a mut Serializer<W, F>);
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
726
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
727
 impl<'a, W, F> ser::Serializer for SymbolSerializer<'a, W, F>
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
728
 where
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
729
   W: io::Write,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
730
   F: WriteFormatter,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
731
 {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
732
   type Ok = ();
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
733
   type Error = Error;
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
734
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
735
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
736
   fn serialize_str(self, value: &str) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
737
     self.0.serialize_symbol(value)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
738
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
739
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
740
   fn serialize_unit_variant(
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
741
     self,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
742
     _name: &'static str,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
743
     _variant_index: u32,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
744
     variant: &'static str,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
745
   ) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
746
     self.0.serialize_str(variant)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
747
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
748
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
749
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
750
   fn serialize_newtype_struct<T>(
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
751
     self,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
752
     _name: &'static str,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
753
     value: &T,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
754
   ) -> Result<()>
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
755
   where
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
756
     T: ?Sized + Serialize,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
757
   {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
758
     value.serialize(self)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
759
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
760
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
761
   type SerializeSeq = Impossible<(), Error>;
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
762
   type SerializeTuple = Impossible<(), Error>;
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
763
   type SerializeTupleStruct = Impossible<(), Error>;
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
764
   type SerializeTupleVariant = Impossible<(), Error>;
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
765
   type SerializeMap = Impossible<(), Error>;
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
766
   type SerializeStruct = Impossible<(), Error>;
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
767
   type SerializeStructVariant = Impossible<(), Error>;
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
768
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
769
   fn serialize_bool(self, _value: bool) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
770
     Err(key_sym_error())
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
771
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
772
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
773
   fn serialize_i8(self, value: i8) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
774
     e!(self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
775
       .0
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
776
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
777
       .begin_string(&mut self.0.writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
778
       .map_err(Error::io));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
779
     e!(self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
780
       .0
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
781
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
782
       .write_i8(&mut self.0.writer, value)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
783
       .map_err(Error::io));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
784
     self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
785
       .0
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
786
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
787
       .end_string(&mut self.0.writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
788
       .map_err(Error::io)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
789
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
790
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
791
   fn serialize_i16(self, value: i16) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
792
     e!(self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
793
       .0
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
794
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
795
       .begin_string(&mut self.0.writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
796
       .map_err(Error::io));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
797
     e!(self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
798
       .0
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
799
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
800
       .write_i16(&mut self.0.writer, value)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
801
       .map_err(Error::io));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
802
     self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
803
       .0
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
804
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
805
       .end_string(&mut self.0.writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
806
       .map_err(Error::io)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
807
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
808
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
809
   fn serialize_i32(self, value: i32) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
810
     e!(self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
811
       .0
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
812
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
813
       .begin_string(&mut self.0.writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
814
       .map_err(Error::io));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
815
     e!(self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
816
       .0
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
817
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
818
       .write_i32(&mut self.0.writer, value)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
819
       .map_err(Error::io));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
820
     self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
821
       .0
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
822
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
823
       .end_string(&mut self.0.writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
824
       .map_err(Error::io)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
825
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
826
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
827
   fn serialize_i64(self, value: i64) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
828
     e!(self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
829
       .0
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
830
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
831
       .begin_string(&mut self.0.writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
832
       .map_err(Error::io));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
833
     e!(self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
834
       .0
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
835
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
836
       .write_i64(&mut self.0.writer, value)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
837
       .map_err(Error::io));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
838
     self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
839
       .0
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
840
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
841
       .end_string(&mut self.0.writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
842
       .map_err(Error::io)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
843
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
844
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
845
   fn serialize_i128(self, value: i128) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
846
     e!(self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
847
       .0
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
848
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
849
       .begin_string(&mut self.0.writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
850
       .map_err(Error::io));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
851
     e!(self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
852
       .0
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
853
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
854
       .write_i128(&mut self.0.writer, value)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
855
       .map_err(Error::io));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
856
     self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
857
       .0
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
858
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
859
       .end_string(&mut self.0.writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
860
       .map_err(Error::io)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
861
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
862
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
863
   fn serialize_u8(self, value: u8) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
864
     e!(self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
865
       .0
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
866
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
867
       .begin_string(&mut self.0.writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
868
       .map_err(Error::io));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
869
     e!(self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
870
       .0
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
871
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
872
       .write_u8(&mut self.0.writer, value)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
873
       .map_err(Error::io));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
874
     self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
875
       .0
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
876
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
877
       .end_string(&mut self.0.writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
878
       .map_err(Error::io)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
879
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
880
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
881
   fn serialize_u16(self, value: u16) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
882
     e!(self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
883
       .0
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
884
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
885
       .begin_string(&mut self.0.writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
886
       .map_err(Error::io));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
887
     e!(self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
888
       .0
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
889
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
890
       .write_u16(&mut self.0.writer, value)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
891
       .map_err(Error::io));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
892
     self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
893
       .0
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
894
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
895
       .end_string(&mut self.0.writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
896
       .map_err(Error::io)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
897
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
898
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
899
   fn serialize_u32(self, value: u32) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
900
     e!(self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
901
       .0
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
902
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
903
       .begin_string(&mut self.0.writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
904
       .map_err(Error::io));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
905
     e!(self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
906
       .0
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
907
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
908
       .write_u32(&mut self.0.writer, value)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
909
       .map_err(Error::io));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
910
     self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
911
       .0
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
912
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
913
       .end_string(&mut self.0.writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
914
       .map_err(Error::io)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
915
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
916
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
917
   fn serialize_u64(self, value: u64) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
918
     e!(self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
919
       .0
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
920
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
921
       .begin_string(&mut self.0.writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
922
       .map_err(Error::io));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
923
     e!(self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
924
       .0
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
925
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
926
       .write_u64(&mut self.0.writer, value)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
927
       .map_err(Error::io));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
928
     self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
929
       .0
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
930
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
931
       .end_string(&mut self.0.writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
932
       .map_err(Error::io)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
933
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
934
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
935
   fn serialize_u128(self, value: u128) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
936
     e!(self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
937
       .0
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
938
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
939
       .begin_string(&mut self.0.writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
940
       .map_err(Error::io));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
941
     e!(self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
942
       .0
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
943
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
944
       .write_u128(&mut self.0.writer, value)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
945
       .map_err(Error::io));
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
946
     self
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
947
       .0
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
948
       .formatter
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
949
       .end_string(&mut self.0.writer)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
950
       .map_err(Error::io)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
951
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
952
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
953
   fn serialize_f32(self, _value: f32) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
954
     Err(key_sym_error())
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
955
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
956
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
957
   fn serialize_f64(self, _value: f64) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
958
     Err(key_sym_error())
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
959
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
960
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
961
   fn serialize_char(self, value: char) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
962
     self.0.serialize_str(&value.to_string())
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
963
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
964
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
965
   fn serialize_bytes(self, _value: &[u8]) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
966
     Err(key_sym_error())
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
967
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
968
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
969
   fn serialize_unit(self) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
970
     Err(key_sym_error())
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
971
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
972
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
973
   fn serialize_unit_struct(self, _name: &'static str) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
974
     Err(key_sym_error())
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
975
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
976
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
977
   fn serialize_newtype_variant<T>(
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
978
     self,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
979
     _name: &'static str,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
980
     _variant_index: u32,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
981
     _variant: &'static str,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
982
     _value: &T,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
983
   ) -> Result<()>
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
984
   where
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
985
     T: ?Sized + Serialize,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
986
   {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
987
     Err(key_sym_error())
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
988
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
989
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
990
   fn serialize_none(self) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
991
     Err(key_sym_error())
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
992
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
993
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
994
   fn serialize_some<T>(self, value: &T) -> Result<()>
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
995
   where
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
996
     T: ?Sized + Serialize,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
997
   {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
998
     value.serialize(self)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
999
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1000
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1001
   fn serialize_seq(self, _len: Option<usize>) -> Result<Self::SerializeSeq> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1002
     Err(key_sym_error())
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1003
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1004
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1005
   fn serialize_tuple(self, _len: usize) -> Result<Self::SerializeTuple> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1006
     Err(key_sym_error())
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1007
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1008
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1009
   fn serialize_tuple_struct(
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1010
     self,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1011
     _name: &'static str,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1012
     _len: usize,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1013
   ) -> Result<Self::SerializeTupleStruct> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1014
     Err(key_sym_error())
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1015
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1016
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1017
   fn serialize_tuple_variant(
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1018
     self,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1019
     _name: &'static str,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1020
     _variant_index: u32,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1021
     _variant: &'static str,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1022
     _len: usize,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1023
   ) -> Result<Self::SerializeTupleVariant> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1024
     Err(key_sym_error())
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1025
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1026
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1027
   fn serialize_map(self, _len: Option<usize>) -> Result<Self::SerializeMap> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1028
     Err(key_sym_error())
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1029
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1030
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1031
   fn serialize_struct(
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1032
     self,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1033
     _name: &'static str,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1034
     _len: usize,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1035
   ) -> Result<Self::SerializeStruct> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1036
     Err(key_sym_error())
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1037
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1038
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1039
   fn serialize_struct_variant(
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1040
     self,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1041
     _name: &'static str,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1042
     _variant_index: u32,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1043
     _variant: &'static str,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1044
     _len: usize,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1045
   ) -> Result<Self::SerializeStructVariant> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1046
     Err(key_sym_error())
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1047
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1048
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1049
   fn collect_str<T>(self, value: &T) -> Result<()>
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1050
   where
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1051
     T: ?Sized + Display,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1052
   {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1053
     self.0.collect_str(value)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1054
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1055
 }