talaria 0.1.1

A high performance, cyclic message passing library.
Documentation
use thiserror::Error;

pub type TalariaResult<T> = Result<T, TalariaError>;

#[derive(Debug, Error)]
pub enum TalariaError {
    #[error(
        "too few partitions requested on partitioned ring. requested: {requested}. required: 2"
    )]
    TooFewPartitions { requested: usize },
    #[error("number of elements in partitioned ring must be a power of two. presented: {count}")]
    ElementsNotPowerOfTwo { count: usize },
    #[error("partition not found. requested: {partition_id}")]
    PartitionNotFound { partition_id: usize },
    #[error("partition is not exclusive. requested: {partition_id}")]
    PartitionNotExclusive { partition_id: usize },
    #[error("partition is not concurrent. requested: {partition_id}")]
    PartitionNotConcurrent { partition_id: usize },
    #[error("this exclusive partition is already in use. requested: {partition_id}")]
    ExclusivePartitionInUse { partition_id: usize },
    #[error("this exclusive partition has an active reservation. partition: {partition_id}")]
    ExclusivePartitionHasActiveReservation { partition_id: usize },
    #[error("not enough space in partition. requested: {requested}, available: {available}")]
    NotEnoughSpace {
        partition_id: usize,
        requested: usize,
        available: usize,
    },
    #[error("requested more elements than held in ring. requested: {requested}")]
    RequestedMoreThanPossible {
        partition_id: usize,
        requested: usize,
    },
    #[error("a spurious failure occurred attempting to acquire a reservation on a concurrent partition. please try again. partition id: {partition_id}, requested: {requested}")]
    SpuriousReservationFailure {
        partition_id: usize,
        requested: usize,
    },
    #[error("no elements in ring")]
    NoElements,
    #[error("must request at least 1 element from partition. partition: {partition_id}")]
    RequestedZeroElements { partition_id: usize },
    #[error("request to retain reservation too large. reservation size: {reservation_size}, requested retain: {retain_amount}")]
    ReservationRetainTooLarge {
        retain_amount: usize,
        reservation_size: usize,
    },
}