use std::io::Error;
use std::io::ErrorKind;
use std::io::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(())
}