rust-dnsbox/lib/dnsbox-base/src/errors.rs

45 lines
891 B
Rust

use bytes::{Buf, Bytes};
use failure;
use std::fmt;
use std::io;
use std::result;
pub type Result<T> = result::Result<T, failure::Error>;
#[derive(Debug)]
pub struct NotEnoughData {
position: u64,
data: Bytes,
}
impl NotEnoughData {
pub fn check(data: &mut io::Cursor<Bytes>, need: usize) -> Result<()> {
if data.remaining() < need {
failure::bail!(NotEnoughData {
position: data.position(),
data: data.get_ref().clone(),
})
}
Ok(())
}
}
impl fmt::Display for NotEnoughData {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(
f,
"not enough data at position {} in {:?}",
self.position, self.data
)
}
}
impl failure::Fail for NotEnoughData {}
macro_rules! check_enough_data {
($data:ident, $n:expr, $context:expr) => {{
use $crate::_failure::ResultExt;
$crate::errors::NotEnoughData::check($data, $n).context($context)?;
}};
}