mod borrowed;
mod display_hex;
mod hash_key;
mod kvp;
mod owned;
pub(crate) mod results;
pub use self::borrowed::{BorrowedBatchOps, BorrowedBytes, BorrowedSlice};
use self::display_hex::DisplayHex;
pub use self::hash_key::HashKey;
pub use self::kvp::{BatchOp, OwnedKeyValueBatch, OwnedKeyValuePair};
pub use self::owned::{OwnedBytes, OwnedSlice};
pub(crate) use self::results::{CResult, NullHandleResult};
pub use self::results::{
ChangeProofResult, CodeIteratorResult, HandleResult, HashResult, IteratorResult,
KeyValueBatchResult, KeyValueResult, NextKeyRangeResult, ProposalResult,
ProposedChangeProofResult, RangeProofResult, ReconstructedResult, RevisionResult, ValueResult,
VerifiedChangeProofResult, VoidResult,
};
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[repr(C, usize)]
pub enum Maybe<T> {
None,
Some(T),
}
impl<T> Maybe<T> {
pub const fn is_some(&self) -> bool {
matches!(self, Maybe::Some(_))
}
pub const fn is_none(&self) -> bool {
matches!(self, Maybe::None)
}
pub const fn as_ref(&self) -> Maybe<&T> {
match self {
Maybe::None => Maybe::None,
Maybe::Some(v) => Maybe::Some(v),
}
}
pub const fn as_mut(&mut self) -> Maybe<&mut T> {
match self {
Maybe::None => Maybe::None,
Maybe::Some(v) => Maybe::Some(v),
}
}
pub fn map<U, F: FnOnce(T) -> U>(self, f: F) -> Maybe<U> {
match self {
Maybe::None => Maybe::None,
Maybe::Some(v) => Maybe::Some(f(v)),
}
}
pub fn into_option(self) -> Option<T> {
match self {
Maybe::None => None,
Maybe::Some(v) => Some(v),
}
}
}
impl<T> From<Option<T>> for Maybe<T> {
fn from(opt: Option<T>) -> Self {
match opt {
None => Maybe::None,
Some(v) => Maybe::Some(v),
}
}
}