use std::io::{
Error,
ErrorKind,
Result,
};
use super::async_contract_error::AsyncContractError;
#[must_use]
pub(crate) fn normalize_async_error(error: Error) -> Error {
match error.kind() {
ErrorKind::WouldBlock => Error::new(
ErrorKind::InvalidData,
AsyncContractError::new(
"asynchronous I/O implementation returned WouldBlock",
error,
),
),
ErrorKind::Interrupted => Error::new(
ErrorKind::InvalidData,
AsyncContractError::new(
"asynchronous I/O implementation returned Interrupted",
error,
),
),
_ => error,
}
}
#[inline]
pub(crate) fn validate_read_count(read: usize, requested: usize) -> Result<()> {
if read > requested {
return Err(Error::new(
ErrorKind::InvalidData,
format!(
"reader reported {read} items for a {requested}-item buffer"
),
));
}
Ok(())
}
#[inline]
pub(crate) fn validate_write_count(
written: usize,
requested: usize,
) -> Result<()> {
if written > requested {
return Err(Error::new(
ErrorKind::InvalidData,
format!(
"writer reported {written} items for a {requested}-item buffer"
),
));
}
Ok(())
}