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