dbeel 0.1.0

dbeel is a fast and minimal distributed thread-per-core document database.
Documentation
use bincode::Options;
use kinded::Kinded;
use serde::{Deserialize, Serialize};

use crate::{
    error::Result, messages::NodeMetadata, utils::bincode::bincode_options,
};

#[derive(Serialize, Deserialize, Debug, Clone, Kinded)]
#[kinded(derive(Hash))]
pub enum GossipEvent {
    Alive(NodeMetadata),
    Dead(String),
    CreateCollection(String, u16),
    DropCollection(String),
}

#[derive(Serialize, Deserialize)]
pub struct GossipMessage {
    pub source: String,
    pub event: GossipEvent,
}

impl GossipMessage {
    #[must_use]
    pub fn new(source: String, event: GossipEvent) -> Self {
        Self { source, event }
    }
}

pub fn deserialize_gossip_message(buf: &[u8]) -> Result<GossipMessage> {
    Ok(
        bincode_options()
            .deserialize_from::<_, GossipMessage>(&mut &buf[..])?,
    )
}

pub fn serialize_gossip_message(message: &GossipMessage) -> Result<Vec<u8>> {
    Ok(bincode_options().serialize(&message)?)
}