gled-protocol 2.30.2

What gled's user interfaces and its engine send each other
Documentation
//! Messages on the wire: MessagePack with field names, so a field added with
//! `#[serde(default)]` keeps older peers working the same way as the JSON
//! asset files do.

use serde::{Serialize, de::DeserializeOwned};
use thiserror::Error;

#[derive(Debug, Error)]
pub enum CodecError {
    #[error("could not encode a message: {0}")]
    Encode(#[from] rmp_serde::encode::Error),
    #[error("could not decode a message: {0}")]
    Decode(#[from] rmp_serde::decode::Error),
}

pub fn encode<T: Serialize>(message: &T) -> Result<Vec<u8>, CodecError> {
    Ok(rmp_serde::to_vec_named(message)?)
}

pub fn decode<T: DeserializeOwned>(bytes: &[u8]) -> Result<T, CodecError> {
    Ok(rmp_serde::from_slice(bytes)?)
}