fencryption_lib/
metadata.rs

1//! Encode and decode metadata.
2
3use std::{collections::TryReserveError, fmt::Debug, io};
4
5use serde::{Deserialize, Serialize};
6
7/// Enum of the different possible metadata errors.
8#[derive(Debug)]
9pub enum ErrorKind {
10    SerializeError(rmp_serde::encode::Error),
11    DeserializeError(rmp_serde::decode::Error),
12    IoError(io::Error),
13    DecodeInt,
14    TryReserveError(TryReserveError),
15}
16
17type Result<T, E = ErrorKind> = std::result::Result<T, E>;
18
19/// Encode [`serde::Serialize`] implementor into bytes.
20pub fn encode<D>(data: D) -> Result<Vec<u8>>
21where
22    D: Serialize,
23{
24    Ok(rmp_serde::to_vec(&data).map_err(|e| ErrorKind::SerializeError(e))?)
25}
26
27/// Decode bytes into specified [`serde::Deserialize`] implementor.
28pub fn decode<O>(bytes: &[u8]) -> Result<O>
29where
30    O: for<'a> Deserialize<'a>,
31{
32    Ok(rmp_serde::from_slice::<O>(&bytes.to_vec()).map_err(|e| ErrorKind::DeserializeError(e))?)
33}