use std::ffi::CString;
use std::ffi::NulError;
use std::fmt;
#[derive(Clone, Debug, Eq, PartialEq, PartialOrd, Ord)]
pub struct IoHint {
name: String,
value: u64,
}
impl IoHint {
pub fn new<T>(name: T, value: u64) -> IoHint
where
T: AsRef<str>,
{
let name = name.as_ref();
log::debug!(
"IoHint::new creating a new `IoHint` instance with name: {:?} and value: {:?}",
name,
value
);
Self {
name: name.trim().to_owned(),
value,
}
}
pub fn name(&self) -> &str {
log::debug!("IoHint::name hint name: {:?}", self.name);
&self.name
}
pub fn value(&self) -> u64 {
log::debug!("IoHint::value hint value: {:?}", self.value);
self.value
}
pub fn name_to_c_string(&self) -> Result<CString, NulError> {
CString::new(self.name.as_str())
}
}
impl<T> From<(T, u64)> for IoHint
where
T: AsRef<str>,
{
#[inline]
fn from(hint: (T, u64)) -> IoHint {
let (name, value) = hint;
IoHint::new(name, value)
}
}
impl From<&IoHint> for IoHint {
#[inline]
fn from(slice: &IoHint) -> IoHint {
slice.clone()
}
}
impl AsRef<IoHint> for IoHint {
#[inline]
fn as_ref(&self) -> &IoHint {
self
}
}
impl fmt::Display for IoHint {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}={}", self.name, self.value)
}
}