messagepack_core/encode/
nil.rs1use super::{Encode, Result};
4use crate::{formats::Format, io::IoWrite};
5
6pub struct NilEncoder;
8
9impl Encode for NilEncoder {
10 fn encode<W: IoWrite>(&self, writer: &mut W) -> Result<usize, <W as IoWrite>::Error> {
11 writer.write(&Format::Nil.as_slice())?;
12 Ok(1)
13 }
14}
15
16impl Encode for () {
17 fn encode<W: IoWrite>(&self, writer: &mut W) -> Result<usize, <W as IoWrite>::Error> {
18 NilEncoder.encode(writer)
19 }
20}
21
22impl<V: Encode> Encode for Option<V> {
23 fn encode<W: IoWrite>(&self, writer: &mut W) -> Result<usize, <W as IoWrite>::Error> {
24 match self {
25 Some(other) => other.encode(writer),
26 _ => NilEncoder.encode(writer),
27 }
28 }
29}
30
31#[cfg(test)]
32mod tests {
33 use super::*;
34
35 #[test]
36 fn encode_nil() {
37 let mut buf = vec![];
38 NilEncoder.encode(&mut buf).unwrap();
39
40 let expected: &[u8] = &[0xc0];
41 assert_eq!(&buf, expected);
42 }
43
44 #[test]
45 fn encode_none() {
46 let mut buf = vec![];
47 let option: Option<i32> = None;
48 option.encode(&mut buf).unwrap();
49
50 let expected: &[u8] = &[0xc0];
51 assert_eq!(&buf, expected);
52 }
53
54 #[test]
55 fn encode_some() {
56 let mut buf = vec![];
57 let option: Option<u8> = Some(0x80);
58 option.encode(&mut buf).unwrap();
59
60 let expected: &[u8] = &[0xcc, 0x80];
61 assert_eq!(&buf, expected);
62 }
63}