use std::os::raw::c_int;
use svbony_sys::*;
#[derive(Debug, Clone, PartialEq, Eq, thiserror::Error)]
pub enum Error {
#[error("invalid camera index")]
InvalidIndex,
#[error("invalid camera ID")]
InvalidId,
#[error("invalid control type")]
InvalidControlType,
#[error("camera not open")]
CameraClosed,
#[error("camera removed")]
CameraRemoved,
#[error("invalid path")]
InvalidPath,
#[error("invalid file format")]
InvalidFileFormat,
#[error("invalid size")]
InvalidSize,
#[error("invalid image type")]
InvalidImageType,
#[error("out of boundary")]
OutOfBoundary,
#[error("timeout")]
Timeout,
#[error("invalid sequence (stop capture first)")]
InvalidSequence,
#[error("buffer too small")]
BufferTooSmall,
#[error("video mode active")]
VideoModeActive,
#[error("exposure in progress")]
ExposureInProgress,
#[error("general error")]
GeneralError,
#[error("invalid mode")]
InvalidMode,
#[error("invalid guide direction")]
InvalidDirection,
#[error("unknown sensor type")]
UnknownSensorType,
#[error("unknown error code: {0}")]
Unknown(i32),
}
pub type Result<T> = std::result::Result<T, Error>;
pub(crate) fn check(code: c_int) -> Result<()> {
match code {
SVB_SUCCESS => Ok(()),
SVB_ERROR_INVALID_INDEX => Err(Error::InvalidIndex),
SVB_ERROR_INVALID_ID => Err(Error::InvalidId),
SVB_ERROR_INVALID_CONTROL_TYPE => Err(Error::InvalidControlType),
SVB_ERROR_CAMERA_CLOSED => Err(Error::CameraClosed),
SVB_ERROR_CAMERA_REMOVED => Err(Error::CameraRemoved),
SVB_ERROR_INVALID_PATH => Err(Error::InvalidPath),
SVB_ERROR_INVALID_FILEFORMAT => Err(Error::InvalidFileFormat),
SVB_ERROR_INVALID_SIZE => Err(Error::InvalidSize),
SVB_ERROR_INVALID_IMGTYPE => Err(Error::InvalidImageType),
SVB_ERROR_OUTOF_BOUNDARY => Err(Error::OutOfBoundary),
SVB_ERROR_TIMEOUT => Err(Error::Timeout),
SVB_ERROR_INVALID_SEQUENCE => Err(Error::InvalidSequence),
SVB_ERROR_BUFFER_TOO_SMALL => Err(Error::BufferTooSmall),
SVB_ERROR_VIDEO_MODE_ACTIVE => Err(Error::VideoModeActive),
SVB_ERROR_EXPOSURE_IN_PROGRESS => Err(Error::ExposureInProgress),
SVB_ERROR_GENERAL_ERROR => Err(Error::GeneralError),
SVB_ERROR_INVALID_MODE => Err(Error::InvalidMode),
SVB_ERROR_INVALID_DIRECTION => Err(Error::InvalidDirection),
SVB_ERROR_UNKNOW_SENSOR_TYPE => Err(Error::UnknownSensorType),
other => Err(Error::Unknown(other as i32)),
}
}