quick_error!
{
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum LastErrorMessageOnThisThreadIsInvalidError
{
Null
{
description("Error message pointer is null")
}
InvalidUtf8
{
description("Error message is not valid ASCII NUL terminated UTF-8")
}
}
}
impl LastErrorMessageOnThisThreadIsInvalidError
{
#[inline(always)]
pub fn lastErrorMessageOnThisThread(errorFunction: ErrorFunction) -> Result<String, LastErrorMessageOnThisThreadIsInvalidError>
{
let pointer = unsafe { errorFunction() };
if pointer.is_null()
{
return Err(LastErrorMessageOnThisThreadIsInvalidError::Null)
}
let threadSafeCStringPointer = unsafe { CStr::from_ptr(pointer) };
let x: CString = threadSafeCStringPointer.into();
match x.into_string()
{
Ok(value) => Ok(value),
Err(_) => Err(LastErrorMessageOnThisThreadIsInvalidError::InvalidUtf8)
}
}
}