use thiserror::Error;
#[derive(Error, Debug)]
#[error("required value was not supplied")]
pub struct RequiredError;
pub trait Required<T> {
fn req(self) -> Result<T, RequiredError>;
}
impl<T> Required<T> for Option<T> {
fn req(self) -> Result<T, RequiredError> {
self.ok_or(RequiredError)
}
}
#[derive(Error, Debug)]
#[error("expected a single item")]
pub struct NotSingleError;
pub trait AsSingleSliceExt<T> {
fn as_single(&self) -> Result<&T, NotSingleError>;
}
impl<T> AsSingleSliceExt<T> for Vec<T> {
fn as_single(&self) -> Result<&T, NotSingleError> {
match self.as_slice() {
[single] => Ok(single),
_ => Err(NotSingleError),
}
}
}
pub fn fst<A, B>((a, _): (A, B)) -> A {
a
}