use crate::sys::OBError;
use crate::sys::enums::OBExceptionType;
use std::{error::Error, fmt};
#[derive(Debug)]
pub struct OrbbecErrorData {
pub message: String,
pub function: String,
pub args: String,
}
#[derive(Debug)]
pub enum OrbbecError {
Unknown(OrbbecErrorData),
StdException(OrbbecErrorData),
CameraDisconnected(OrbbecErrorData),
PlatformException(OrbbecErrorData),
InvalidValue(OrbbecErrorData),
WrongAPICallSequence(OrbbecErrorData),
NotImplemented(OrbbecErrorData),
IOException(OrbbecErrorData),
MemoryException(OrbbecErrorData),
UnsupportedOperation(OrbbecErrorData),
}
impl fmt::Display for OrbbecError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self {
OrbbecError::Unknown(data) => write!(f, "Unknown Error: {}", data.message),
OrbbecError::StdException(data) => write!(f, "Standard Exception: {}", data.message),
OrbbecError::CameraDisconnected(data) => {
write!(f, "Camera Disconnected: {}", data.message)
}
OrbbecError::PlatformException(data) => {
write!(f, "Platform Exception: {}", data.message)
}
OrbbecError::InvalidValue(data) => write!(f, "Invalid Value: {}", data.message),
OrbbecError::WrongAPICallSequence(data) => {
write!(f, "Wrong API Call Sequence: {}", data.message)
}
OrbbecError::NotImplemented(data) => write!(f, "Not Implemented: {}", data.message),
OrbbecError::IOException(data) => write!(f, "I/O Exception: {}", data.message),
OrbbecError::MemoryException(data) => write!(f, "Memory Exception: {}", data.message),
OrbbecError::UnsupportedOperation(data) => {
write!(f, "Unsupported Operation: {}", data.message)
}
}
}
}
impl Error for OrbbecError {}
impl From<&OBError> for OrbbecError {
fn from(err: &OBError) -> Self {
let message = err.message();
let function = err.function();
let args = err.args();
let exception_type = err.exception_type();
let data = OrbbecErrorData {
message,
function,
args,
};
match exception_type {
OBExceptionType::Unknown => OrbbecError::Unknown(data),
OBExceptionType::StdException => OrbbecError::StdException(data),
OBExceptionType::CameraDisconnected => OrbbecError::CameraDisconnected(data),
OBExceptionType::PlatformException => OrbbecError::PlatformException(data),
OBExceptionType::InvalidValue => OrbbecError::InvalidValue(data),
OBExceptionType::WrongAPICallSequence => OrbbecError::WrongAPICallSequence(data),
OBExceptionType::NotImplemented => OrbbecError::NotImplemented(data),
OBExceptionType::IOException => OrbbecError::IOException(data),
OBExceptionType::MemoryException => OrbbecError::MemoryException(data),
OBExceptionType::UnsupportedOperation => OrbbecError::UnsupportedOperation(data),
}
}
}
impl From<OBError> for OrbbecError {
fn from(err: OBError) -> Self {
OrbbecError::from(&err)
}
}