Skip to main content

gled_protocol/
codec.rs

1//! Messages on the wire: MessagePack with field names, so a field added with
2//! `#[serde(default)]` keeps older peers working the same way as the JSON
3//! asset files do.
4
5use serde::{Serialize, de::DeserializeOwned};
6use thiserror::Error;
7
8#[derive(Debug, Error)]
9pub enum CodecError {
10    #[error("could not encode a message: {0}")]
11    Encode(#[from] rmp_serde::encode::Error),
12    #[error("could not decode a message: {0}")]
13    Decode(#[from] rmp_serde::decode::Error),
14}
15
16pub fn encode<T: Serialize>(message: &T) -> Result<Vec<u8>, CodecError> {
17    Ok(rmp_serde::to_vec_named(message)?)
18}
19
20pub fn decode<T: DeserializeOwned>(bytes: &[u8]) -> Result<T, CodecError> {
21    Ok(rmp_serde::from_slice(bytes)?)
22}