#[derive(Copy, Clone, PartialEq, Eq, Debug)]
pub enum Status<T> {
Complete(T),
Partial(usize),
}
impl<T> Status<T> {
#[inline]
pub fn is_complete(&self) -> bool {
match *self {
Status::Complete(..) => true,
Status::Partial(..) => false,
}
}
#[inline]
pub fn is_partial(&self) -> bool {
match *self {
Status::Complete(..) => false,
Status::Partial(..) => true,
}
}
#[inline]
pub fn unwrap(self) -> T {
match self {
Status::Complete(t) => t,
Status::Partial(..) => panic!("Tried to unwrap Status::Partial"),
}
}
}
#[macro_export]
macro_rules! complete {
($e:expr) => {
match $e? {
Status::Complete(v) => v,
Status::Partial(x) => return Ok(Status::Partial(x)),
}
};
}
macro_rules! read {
($fn:path, $bytes:expr, $offset:expr) => {
match $fn(&$bytes[$offset..])? {
Status::Complete(v) => ($offset + v.0, v.1),
Status::Partial(x) => return Ok(Status::Partial(x)),
}
};
}