pgp/
ser.rs

1//! # Serialize trait module
2
3use std::io;
4
5use crate::errors::Result;
6
7pub trait Serialize {
8    fn to_writer<W: io::Write>(&self, _: &mut W) -> Result<()>;
9    fn write_len(&self) -> usize;
10
11    fn to_bytes(&self) -> Result<Vec<u8>> {
12        let mut buf = Vec::with_capacity(self.write_len());
13        self.to_writer(&mut buf)?;
14
15        Ok(buf)
16    }
17}
18
19impl<T: Serialize> Serialize for &T {
20    fn to_writer<W: io::Write>(&self, writer: &mut W) -> Result<()> {
21        (*self).to_writer(writer)
22    }
23    fn write_len(&self) -> usize {
24        (*self).write_len()
25    }
26}
27
28impl<T: Serialize> Serialize for &[T] {
29    fn to_writer<W: io::Write>(&self, writer: &mut W) -> Result<()> {
30        for x in self.iter() {
31            (*x).to_writer(writer)?;
32        }
33        Ok(())
34    }
35
36    fn write_len(&self) -> usize {
37        self.iter().map(|w| w.write_len()).sum()
38    }
39}
40
41impl<T: Serialize> Serialize for Vec<T> {
42    fn to_writer<W: io::Write>(&self, writer: &mut W) -> Result<()> {
43        for x in self.iter() {
44            (*x).to_writer(writer)?;
45        }
46        Ok(())
47    }
48
49    fn write_len(&self) -> usize {
50        self.iter().map(|w| w.write_len()).sum()
51    }
52}