use failure::Error;
#[derive(Debug, Fail)]
pub enum ElementError {
#[fail(display = "{}", _0)]
From(Box<FromSafeArrElemError>),
#[fail(display = "{}", _0)]
Into(Box<IntoSafeArrElemError>),
}
impl From<FromSafeArrElemError> for ElementError {
fn from(fsaee: FromSafeArrElemError) -> ElementError {
ElementError::From(Box::new(fsaee))
}
}
impl From<IntoSafeArrElemError> for ElementError {
fn from(isaee: IntoSafeArrElemError) -> ElementError {
ElementError::Into(Box::new(isaee))
}
}
impl From<IntoVariantError> for ElementError {
fn from(ive: IntoVariantError) -> Self {
ElementError::from(IntoSafeArrElemError::from(ive))
}
}
impl From<FromVariantError> for ElementError {
fn from(fve: FromVariantError) -> Self {
ElementError::from(FromSafeArrElemError::from(fve))
}
}
#[derive(Debug, Fail)]
pub enum FromSafeArrElemError {
#[fail(display = "SafeArrayGetElement failed with HRESULT=0x{:x}", hr)]
GetElementFailed {
hr: i32
},
#[fail(display = "{}", _0)]
BStringFailed(Box<BStringError>),
#[fail(display = "from variant failure: {}", _0)]
FromVarError(Box<FromVariantError>),
}
impl From<FromVariantError> for FromSafeArrElemError {
fn from(fve: FromVariantError) -> FromSafeArrElemError {
FromSafeArrElemError::FromVarError(Box::new(fve))
}
}
#[derive(Debug, Fail)]
pub enum IntoSafeArrElemError {
#[fail(display = "{}", _0)]
BStringFailed(Box<BStringError>),
#[fail(display = "SafeArrayPutElement failed with HRESULT = 0x{}", hr)]
PutElementFailed {
hr: i32
},
#[fail(display = "IntoVariantError: {}", _0)]
IntoVariantError(Box<IntoVariantError>),
}
impl From<IntoVariantError> for IntoSafeArrElemError {
fn from(ive: IntoVariantError) -> IntoSafeArrElemError {
IntoSafeArrElemError::IntoVariantError(Box::new(ive))
}
}
impl From<BStringError> for IntoSafeArrElemError {
fn from(bse: BStringError) -> IntoSafeArrElemError {
IntoSafeArrElemError::BStringFailed(Box::new(bse))
}
}
#[derive(Debug, Fail)]
pub enum SafeArrayError {
#[fail(display = "{}", _0)]
From(Box<FromSafeArrayError>),
#[fail(display = "{}", _0)]
Into(Box<IntoSafeArrayError>),
}
impl From<FromSafeArrayError> for SafeArrayError {
fn from(fsae: FromSafeArrayError) -> SafeArrayError {
SafeArrayError::From(Box::new(fsae))
}
}
impl From<IntoSafeArrayError> for SafeArrayError {
fn from(isae: IntoSafeArrayError) -> SafeArrayError {
SafeArrayError::Into(Box::new(isae))
}
}
impl From<FromVariantError> for SafeArrayError {
fn from(fve: FromVariantError) -> Self {
SafeArrayError::from(FromSafeArrayError::from(fve))
}
}
#[derive(Debug, Fail)]
pub enum FromSafeArrayError{
#[fail(display = "Safe array dimensions are invalid: {}", sa_dims)]
SafeArrayDimsInvalid {
sa_dims: u32
},
#[fail(display = "expected vartype was not found - expected: {} - found: {}", expected, found)]
VarTypeDoesNotMatch {
expected: u32,
found: u32
},
#[fail(display = "SafeArrayGetLBound failed with HRESULT = 0x{}", hr)]
SafeArrayLBoundFailed {
hr: i32
},
#[fail(display = "SafeArrayGetRBound failed with HRESULT = 0x{}", hr)]
SafeArrayRBoundFailed {
hr: i32
},
#[fail(display = "SafeArrayGetVartype failed with HRESULT = 0x{}", hr)]
SafeArrayGetVartypeFailed {
hr: i32
},
#[fail(display = "element conversion failed at index {} with {}", index, element)]
ElementConversionFailed {
index: usize,
element: Box<ElementError>
},
#[fail(display = "from variant failure: {}", _0)]
FromVariantError(Box<FromVariantError>)
}
impl From<FromVariantError> for FromSafeArrayError {
fn from(fve: FromVariantError) -> Self {
FromSafeArrayError::FromVariantError(Box::new(fve))
}
}
impl FromSafeArrayError {
pub fn from_element_err<E: Into<ElementError>>(ee: E, index: usize) -> FromSafeArrayError {
FromSafeArrayError::ElementConversionFailed{index: index, element: Box::new(ee.into())}
}
}
#[derive(Debug, Fail)]
pub enum IntoSafeArrayError {
#[fail(display = "element conversion failed at index {} with {}", index, element)]
ElementConversionFailed {
index: usize,
element: Box<ElementError>
},
#[fail(display = "into variant failure: {}", _0)]
IntoVariantError(Box<IntoVariantError>)
}
impl From<IntoVariantError> for IntoSafeArrayError{
fn from(ive: IntoVariantError) -> Self {
IntoSafeArrayError::IntoVariantError(Box::new(ive))
}
}
impl IntoSafeArrayError {
pub fn from_element_err<E: Into<ElementError>>(ee: E, index: usize) -> IntoSafeArrayError {
IntoSafeArrayError::ElementConversionFailed{index: index, element: Box::new(ee.into())}
}
}
#[derive(Clone, Copy, Debug, Fail)]
pub enum BStringError {
#[fail(display = "BSTR allocation failed for len: {}", len)]
AllocateFailed {
len: usize
}
}
#[derive(Copy, Clone, Debug, Fail)]
pub enum FromVariantError {
#[fail(display = "VARIANT pointer is null")]
VariantPtrNull,
}
#[derive(Debug, Fail)]
pub enum IntoVariantError {
#[fail(display = "{}", _0)]
AllocBStrFailed(Box<BStringError>),
#[fail(display = "SafeArray conversion failed: {}", _0)]
SafeArrConvFailed(Box<SafeArrayError>),
}
impl From<BStringError> for IntoVariantError {
fn from(bse: BStringError) -> IntoVariantError {
IntoVariantError::AllocBStrFailed(Box::new(bse))
}
}
#[derive(Debug, Fail)]
pub enum ConversionError {
#[fail(display = "pointer was null")]
PtrWasNull,
#[fail(display = "{}", _0)]
General(Box<Error>)
}