dbeel 0.1.0

dbeel is a fast and minimal distributed thread-per-core document database.
Documentation
use async_channel::{RecvError, SendError};
use kinded::Kinded;
use serde::{Deserialize, Serialize};
use thiserror::Error;

use crate::messages::ShardPacket;

#[derive(Error, Debug, Kinded)]
#[kinded(display = "snake_case", derive(Serialize, Deserialize))]
pub enum Error {
    #[error("creating the '{pattern}' regex failed")]
    RegexCreationError {
        source: regex::Error,
        pattern: String,
    },

    #[error(transparent)]
    GlommioError(#[from] glommio::GlommioError<()>),
    #[error(transparent)]
    StdIOError(#[from] std::io::Error),
    #[error(transparent)]
    BincodeSerdeError(#[from] bincode::Error),
    #[error(transparent)]
    RedBlackTreeError(#[from] rbtree_arena::Error),

    #[error(transparent)]
    ShardReceiverError(#[from] RecvError),
    #[error(transparent)]
    ShardPacketSenderError(#[from] SendError<ShardPacket>),
    #[error(transparent)]
    ShardEmptySenderError(#[from] SendError<()>),

    #[error("timed out")]
    Timeout,
    #[error("shard stopped")]
    ShardStopped,

    #[error("response type not expected")]
    ResponseWrongType,
    #[error("response '{0}' failed with: '{1}'")]
    ResponseError(ErrorKind, String),
    #[error("no remote shards received from asking all seed nodes")]
    NoRemoteShardsFoundInSeedNodes,

    #[error("shard doesn't own the key, maybe you need to update your cluster metadata")]
    KeyNotOwnedByShard,

    #[error("field '{0}' is missing")]
    MissingField(String),
    #[error("field '{0}' is not a u16")]
    FieldNotU16(String),
    #[error("unsupported field '{0}'")]
    UnsupportedField(String),
    #[error("field '{0}' is of a bad type")]
    BadFieldType(String),
    #[error("collection '{0}' not found")]
    CollectionNotFound(String),
    #[error("collection '{0}' already exists")]
    CollectionAlreadyExists(String),
    #[error("item too large")]
    ItemTooLarge,
    #[error("key not found")]
    KeyNotFound,
    #[error("msgpack decode failed")]
    MsgpackDecodeError(#[from] rmpv::decode::Error),
    #[error("msgpack encode failed")]
    MsgpackEncodeError(#[from] rmpv::encode::Error),
    #[error("msgpack serde decode failed")]
    MsgpackSerdeDecodeError(#[from] rmp_serde::decode::Error),
    #[error("msgpack serde encode failed")]
    MsgpackSerdeEncodeError(#[from] rmp_serde::encode::Error),
}

pub type Result<T> = ::std::result::Result<T, Error>;