pollination 0.1.0

An experimental library exposing hybrid Raft and CRDT primitives.
Documentation
use serde::{Deserialize, Serialize};

#[cfg(feature = "json")]
mod json {
    use super::*;

    pub(crate) fn serialize<T: Serialize>(val: T) -> Result<Vec<u8>, SerializeError> {
        serde_json::to_vec(&val)
    }

    pub(crate) type SerializeError = serde_json::Error;

    pub(crate) fn deserialize<T: for<'de> Deserialize<'de>>(
        val: Vec<u8>,
    ) -> Result<T, DeserializeError> {
        let jd = &mut serde_json::Deserializer::from_slice(&val[..]);
        serde_path_to_error::deserialize(jd)
    }

    pub(crate) type DeserializeError = serde_path_to_error::Error<serde_json::Error>;
}

#[cfg(feature = "json")]
pub use json::*;

#[cfg(not(feature = "json"))]
mod bincode_ {
    use super::*;

    pub(crate) fn serialize<T: Serialize>(val: T) -> Result<Vec<u8>, SerializeError> {
        bincode::serde::encode_to_vec(val, bincode::config::standard())
    }

    pub(crate) type SerializeError = bincode::error::EncodeError;

    pub(crate) fn deserialize<T: for<'de> Deserialize<'de>>(
        val: Vec<u8>,
    ) -> Result<T, DeserializeError> {
        let (res, _) = bincode::serde::decode_from_slice(&val, bincode::config::standard())?;
        Ok(res)
    }

    pub(crate) type DeserializeError = bincode::error::DecodeError;
}

#[cfg(not(feature = "json"))]
#[allow(unused_imports)]
pub use bincode_::*;