Skip to content

Commit 46b3d5d

Browse files
committed
Serializer: refactoring.
- Returned back `Serializer` instantiation using `new` function. - Added `with` function to instantiate `Serializer` with specified struct encoder.
1 parent 5df6588 commit 46b3d5d

3 files changed

Lines changed: 65 additions & 58 deletions

File tree

rmp-serde/src/encode.rs

Lines changed: 12 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -83,28 +83,6 @@ impl VariantWriter for StructArrayWriter {
8383
}
8484
}
8585

86-
/// Writes struct as MessagePack map including field names
87-
pub struct StructMapWriter;
88-
89-
impl VariantWriter for StructMapWriter {
90-
fn write_struct_len<W>(&self, wr: &mut W, len: u32) -> Result<Marker, ValueWriteError>
91-
where W: Write
92-
{
93-
write_map_len(wr, len)
94-
}
95-
96-
fn write_field_name<W>(&self, wr: &mut W, _key: &str) -> Result<(), ValueWriteError>
97-
where W: Write
98-
{
99-
write_str(wr, _key)
100-
}
101-
}
102-
103-
/// Creates a new MessagePack encoder with default variant options
104-
pub fn new_default_serializer<'a>(wr: &'a mut Write) -> Serializer<'a, StructArrayWriter> {
105-
Serializer::new(wr, StructArrayWriter)
106-
}
107-
10886
/// Represents MessagePack serialization implementation.
10987
///
11088
/// # Note
@@ -122,12 +100,22 @@ pub struct Serializer<'a, W: VariantWriter> {
122100
vw: W,
123101
}
124102

103+
impl<'a> Serializer<'a, StructArrayWriter> {
104+
/// Creates a new MessagePack encoder whose output will be written to the writer specified.
105+
pub fn new(wr: &'a mut Write) -> Serializer<'a, StructArrayWriter> {
106+
Serializer {
107+
wr: wr,
108+
vw: StructArrayWriter,
109+
}
110+
}
111+
}
112+
125113
impl<'a, W: VariantWriter> Serializer<'a, W> {
126114
/// Creates a new MessagePack encoder whose output will be written to the writer specified.
127-
pub fn new(wr: &'a mut Write, variant_writer: W) -> Serializer<'a, W> {
115+
pub fn with(wr: &'a mut Write, vw: W) -> Serializer<'a, W> {
128116
Serializer {
129117
wr: wr,
130-
vw: variant_writer,
118+
vw: vw,
131119
}
132120
}
133121
}

rmp-serde/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@ pub mod decode;
55
pub mod encode;
66

77
pub use decode::Deserializer;
8-
pub use encode::{Serializer, new_default_serializer, StructArrayWriter, StructMapWriter};
8+
pub use encode::Serializer;

rmp-serde/tests/serializer.rs

Lines changed: 52 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,22 @@
22
#![cfg_attr(feature = "serde_macros", plugin(serde_macros))]
33

44
extern crate serde;
5+
extern crate rmp;
56
extern crate rmp_serde;
67

78
use std::io::Cursor;
89

910
use serde::Serialize;
1011

11-
use rmp_serde::new_default_serializer;
12+
use rmp_serde::Serializer;
1213
use rmp_serde::encode::Error;
1314

14-
#[cfg(feature = "serde_macros")]
15-
use rmp_serde::{Serializer, StructMapWriter};
16-
1715
#[test]
1816
fn pass_null() {
1917
let mut buf = [0x00];
2018

2119
let val = ();
22-
val.serialize(&mut new_default_serializer(&mut &mut buf[..])).ok().unwrap();
20+
val.serialize(&mut Serializer::new(&mut &mut buf[..])).ok().unwrap();
2321

2422
assert_eq!([0xc0], buf);
2523
}
@@ -30,7 +28,7 @@ fn fail_null() {
3028

3129
let val = ();
3230

33-
match val.serialize(&mut new_default_serializer(&mut &mut buf[..])) {
31+
match val.serialize(&mut Serializer::new(&mut &mut buf[..])) {
3432
Err(Error::InvalidFixedValueWrite(..)) => (),
3533
other => panic!("unexpected result: {:?}", other)
3634
}
@@ -43,7 +41,7 @@ fn pass_bool() {
4341
{
4442
let mut cur = Cursor::new(&mut buf[..]);
4543

46-
let mut encoder = new_default_serializer(&mut cur);
44+
let mut encoder = Serializer::new(&mut cur);
4745

4846
let val = true;
4947
val.serialize(&mut encoder).ok().unwrap();
@@ -59,7 +57,7 @@ fn pass_usize() {
5957
let mut buf = [0x00, 0x00];
6058

6159
let val = 255usize;
62-
val.serialize(&mut new_default_serializer(&mut &mut buf[..])).ok().unwrap();
60+
val.serialize(&mut Serializer::new(&mut &mut buf[..])).ok().unwrap();
6361

6462
assert_eq!([0xcc, 0xff], buf);
6563
}
@@ -69,7 +67,7 @@ fn pass_u8() {
6967
let mut buf = [0x00, 0x00];
7068

7169
let val = 255u8;
72-
val.serialize(&mut new_default_serializer(&mut &mut buf[..])).ok().unwrap();
70+
val.serialize(&mut Serializer::new(&mut &mut buf[..])).ok().unwrap();
7371

7472
assert_eq!([0xcc, 0xff], buf);
7573
}
@@ -79,7 +77,7 @@ fn pass_u16() {
7977
let mut buf = [0x00, 0x00, 0x00];
8078

8179
let val = 65535u16;
82-
val.serialize(&mut new_default_serializer(&mut &mut buf[..])).ok().unwrap();
80+
val.serialize(&mut Serializer::new(&mut &mut buf[..])).ok().unwrap();
8381

8482
assert_eq!([0xcd, 0xff, 0xff], buf);
8583
}
@@ -89,7 +87,7 @@ fn pass_u32() {
8987
let mut buf = [0x00, 0x00, 0x00, 0x00, 0x00];
9088

9189
let val = 4294967295u32;
92-
val.serialize(&mut new_default_serializer(&mut &mut buf[..])).ok().unwrap();
90+
val.serialize(&mut Serializer::new(&mut &mut buf[..])).ok().unwrap();
9391

9492
assert_eq!([0xce, 0xff, 0xff, 0xff, 0xff], buf);
9593
}
@@ -99,7 +97,7 @@ fn pass_u64() {
9997
let mut buf = [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00];
10098

10199
let val = 18446744073709551615u64;
102-
val.serialize(&mut new_default_serializer(&mut &mut buf[..])).ok().unwrap();
100+
val.serialize(&mut Serializer::new(&mut &mut buf[..])).ok().unwrap();
103101

104102
assert_eq!([0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff], buf);
105103
}
@@ -109,7 +107,7 @@ fn pass_isize() {
109107
let mut buf = [0x00, 0x00];
110108

111109
let val = -128isize;
112-
val.serialize(&mut new_default_serializer(&mut &mut buf[..])).ok().unwrap();
110+
val.serialize(&mut Serializer::new(&mut &mut buf[..])).ok().unwrap();
113111

114112
assert_eq!([0xd0, 0x80], buf);
115113
}
@@ -119,7 +117,7 @@ fn pass_i8() {
119117
let mut buf = [0x00, 0x00];
120118

121119
let val = -128i8;
122-
val.serialize(&mut new_default_serializer(&mut &mut buf[..])).ok().unwrap();
120+
val.serialize(&mut Serializer::new(&mut &mut buf[..])).ok().unwrap();
123121

124122
assert_eq!([0xd0, 0x80], buf);
125123
}
@@ -129,7 +127,7 @@ fn pass_i16() {
129127
let mut buf = [0x00, 0x00, 0x00];
130128

131129
let val = -32768i16;
132-
val.serialize(&mut new_default_serializer(&mut &mut buf[..])).ok().unwrap();
130+
val.serialize(&mut Serializer::new(&mut &mut buf[..])).ok().unwrap();
133131

134132
assert_eq!([0xd1, 0x80, 0x00], buf);
135133
}
@@ -139,7 +137,7 @@ fn pass_i32() {
139137
let mut buf = [0x00, 0x00, 0x00, 0x00, 0x00];
140138

141139
let val = -2147483648i32;
142-
val.serialize(&mut new_default_serializer(&mut &mut buf[..])).ok().unwrap();
140+
val.serialize(&mut Serializer::new(&mut &mut buf[..])).ok().unwrap();
143141

144142
assert_eq!([0xd2, 0x80, 0x00, 0x00, 0x00], buf);
145143
}
@@ -149,7 +147,7 @@ fn pass_i64() {
149147
let mut buf = [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00];
150148

151149
let val = -9223372036854775808i64;
152-
val.serialize(&mut new_default_serializer(&mut &mut buf[..])).ok().unwrap();
150+
val.serialize(&mut Serializer::new(&mut &mut buf[..])).ok().unwrap();
153151

154152
assert_eq!([0xd3, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], buf);
155153
}
@@ -159,7 +157,7 @@ fn pass_f32() {
159157
let mut buf = [0x00, 0x00, 0x00, 0x00, 0x00];
160158

161159
let val = 3.4028234e38_f32;
162-
val.serialize(&mut new_default_serializer(&mut &mut buf[..])).ok().unwrap();
160+
val.serialize(&mut Serializer::new(&mut &mut buf[..])).ok().unwrap();
163161

164162
assert_eq!([0xca, 0x7f, 0x7f, 0xff, 0xff], buf);
165163
}
@@ -169,7 +167,7 @@ fn pass_f64() {
169167
let mut buf = [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00];
170168

171169
let val = 42f64;
172-
val.serialize(&mut new_default_serializer(&mut &mut buf[..])).ok().unwrap();
170+
val.serialize(&mut Serializer::new(&mut &mut buf[..])).ok().unwrap();
173171

174172
assert_eq!([0xcb, 0x40, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], buf);
175173
}
@@ -179,7 +177,7 @@ fn pass_char() {
179177
let mut buf = [0x00, 0x00];
180178

181179
let val = '!';
182-
val.serialize(&mut new_default_serializer(&mut &mut buf[..])).ok().unwrap();
180+
val.serialize(&mut Serializer::new(&mut &mut buf[..])).ok().unwrap();
183181

184182
assert_eq!([0xa1, 0x21], buf);
185183
}
@@ -190,7 +188,7 @@ fn pass_string() {
190188
let mut buf = [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00];
191189

192190
let val = "le message";
193-
val.serialize(&mut new_default_serializer(&mut &mut buf[..])).ok().unwrap();
191+
val.serialize(&mut Serializer::new(&mut &mut buf[..])).ok().unwrap();
194192

195193
assert_eq!([0xaa, 0x6c, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65], buf);
196194
}
@@ -204,7 +202,7 @@ fn pass_struct() {
204202
struct Decoded { id: u32, value: u32 }
205203

206204
let val = Decoded { id: 42, value: 100500 };
207-
val.serialize(&mut new_default_serializer(&mut &mut buf[..])).ok().unwrap();
205+
val.serialize(&mut Serializer::new(&mut &mut buf[..])).ok().unwrap();
208206

209207
assert_eq!([0x92, 0x2a, 0xce, 0x0, 0x1, 0x88, 0x94], buf);
210208
}
@@ -214,7 +212,7 @@ fn pass_tuple() {
214212
let mut buf = [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00];
215213

216214
let val = (42u32, 100500u32);
217-
val.serialize(&mut new_default_serializer(&mut &mut buf[..])).ok().unwrap();
215+
val.serialize(&mut Serializer::new(&mut &mut buf[..])).ok().unwrap();
218216

219217
assert_eq!([0x92, 0x2a, 0xce, 0x0, 0x1, 0x88, 0x94], buf);
220218
}
@@ -224,7 +222,7 @@ fn pass_option_some() {
224222
let mut buf = [0x00];
225223

226224
let val = Some(100u32);
227-
val.serialize(&mut new_default_serializer(&mut &mut buf[..])).ok().unwrap();
225+
val.serialize(&mut Serializer::new(&mut &mut buf[..])).ok().unwrap();
228226

229227
assert_eq!([0x64], buf);
230228
}
@@ -234,7 +232,7 @@ fn pass_option_none() {
234232
let mut buf = [0x00];
235233

236234
let val: Option<u32> = None;
237-
val.serialize(&mut new_default_serializer(&mut &mut buf[..])).ok().unwrap();
235+
val.serialize(&mut Serializer::new(&mut &mut buf[..])).ok().unwrap();
238236

239237
assert_eq!([0xc0], buf);
240238
}
@@ -244,7 +242,7 @@ fn pass_seq() {
244242
let mut buf = [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00];
245243

246244
let val = vec!["le", "shit"];
247-
val.serialize(&mut new_default_serializer(&mut &mut buf[..])).ok().unwrap();
245+
val.serialize(&mut Serializer::new(&mut &mut buf[..])).ok().unwrap();
248246

249247
assert_eq!([0x92, 0xa2, 0x6c, 0x65, 0xa4, 0x73, 0x68, 0x69, 0x74], buf);
250248
}
@@ -258,7 +256,7 @@ fn pass_map() {
258256
let mut val = BTreeMap::new();
259257
val.insert(0u8, "le");
260258
val.insert(1u8, "shit");
261-
val.serialize(&mut new_default_serializer(&mut &mut buf[..])).ok().unwrap();
259+
val.serialize(&mut Serializer::new(&mut &mut buf[..])).ok().unwrap();
262260

263261
let out = [
264262
0x82, // 2 (size)
@@ -273,6 +271,27 @@ fn pass_map() {
273271
#[cfg(feature = "serde_macros")]
274272
#[test]
275273
fn pass_struct_map() {
274+
use std::io::Write;
275+
use rmp::Marker;
276+
use rmp::encode::{ValueWriteError, write_map_len, write_str};
277+
use rmp_serde::encode::VariantWriter;
278+
279+
struct StructMapWriter;
280+
281+
impl VariantWriter for StructMapWriter {
282+
fn write_struct_len<W>(&self, wr: &mut W, len: u32) -> Result<Marker, ValueWriteError>
283+
where W: Write
284+
{
285+
write_map_len(wr, len)
286+
}
287+
288+
fn write_field_name<W>(&self, wr: &mut W, _key: &str) -> Result<(), ValueWriteError>
289+
where W: Write
290+
{
291+
write_str(wr, _key)
292+
}
293+
}
294+
276295
#[derive(Debug, PartialEq, Serialize)]
277296
struct Custom<'a> {
278297
et: &'a str,
@@ -283,7 +302,7 @@ fn pass_struct_map() {
283302
let mut buf = [0x00; 20];
284303

285304
let val = Custom { et: "voila", le: 0, shit: 1 };
286-
val.serialize(&mut Serializer::new(&mut &mut buf[..], StructMapWriter)).ok().unwrap();
305+
val.serialize(&mut Serializer::with(&mut &mut buf[..], StructMapWriter)).ok().unwrap();
287306

288307
let out = [
289308
0x83, // 3 (size)
@@ -312,7 +331,7 @@ fn pass_enum() {
312331
let mut buf = [0x00; 3];
313332

314333
let val = Custom::Second;
315-
val.serialize(&mut new_default_serializer(&mut &mut buf[..])).ok().unwrap();
334+
val.serialize(&mut Serializer::new(&mut &mut buf[..])).ok().unwrap();
316335

317336
let out = [0x92, 0x01, 0x90];
318337
assert_eq!(out, buf);
@@ -331,7 +350,7 @@ fn pass_enum_variant_with_arg() {
331350
let mut buf = [0x00; 4];
332351

333352
let val = Custom::Second(42);
334-
val.serialize(&mut new_default_serializer(&mut &mut buf[..])).ok().unwrap();
353+
val.serialize(&mut Serializer::new(&mut &mut buf[..])).ok().unwrap();
335354

336355
let out = [0x92, 0x01, 0x91, 0x2a];
337356
assert_eq!(out, buf);
@@ -343,7 +362,7 @@ fn pass_encodong_struct_into_vec() {
343362

344363
let mut buf: Vec<u8> = Vec::new();
345364

346-
val.serialize(&mut new_default_serializer(&mut buf)).unwrap();
365+
val.serialize(&mut Serializer::new(&mut buf)).unwrap();
347366

348367
assert_eq!(vec![0x92, 0x2a, 0xaa, 0x74, 0x68, 0x65, 0x20, 0x41, 0x6e, 0x73, 0x77, 0x65, 0x72], buf);
349368
}
@@ -359,7 +378,7 @@ fn encode_struct_with_string_using_vec() {
359378
let mut buf = Vec::new();
360379

361380
let val = Custom { data: "le message".to_string() };
362-
val.serialize(&mut new_default_serializer(&mut buf)).ok().unwrap();
381+
val.serialize(&mut Serializer::new(&mut buf)).ok().unwrap();
363382

364383
let out = vec![0x91, 0xaa, 0x6c, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65];
365384
assert_eq!(out, buf);
@@ -373,7 +392,7 @@ fn pass_bin() {
373392
let vec = vec![0xcc, 0x80];
374393
let val = Bytes::from(&vec);
375394

376-
val.serialize(&mut new_default_serializer(&mut buf)).ok().unwrap();
395+
val.serialize(&mut Serializer::new(&mut buf)).ok().unwrap();
377396

378397
assert_eq!(vec![0xc4, 0x02, 0xcc, 0x80], buf);
379398
}

0 commit comments

Comments
 (0)