use anyhow::{Error, Result, anyhow}; use std::fmt; use std::mem::MaybeUninit; use std::os::raw::c_int; /// the error type for libCZIAPI #[derive(Clone, Debug)] pub enum LibCZIApiError { OK, InvalidArgument, InvalidHandle, OutOfMemory, IndexOutOfRange, LockUnlockSemanticViolated, UnspecifiedError, } impl std::error::Error for LibCZIApiError {} impl TryFrom for LibCZIApiError { type Error = Error; fn try_from(code: c_int) -> Result { match code { 0 => Ok(LibCZIApiError::OK), 1 => Err(Error::from(LibCZIApiError::InvalidArgument)), 2 => Err(Error::from(LibCZIApiError::InvalidHandle)), 3 => Err(Error::from(LibCZIApiError::OutOfMemory)), 4 => Err(Error::from(LibCZIApiError::IndexOutOfRange)), 20 => Err(Error::from(LibCZIApiError::LockUnlockSemanticViolated)), 50 => Err(Error::from(LibCZIApiError::UnspecifiedError)), _ => Err(anyhow!("Unknown error code {}", code)), } } } impl fmt::Display for LibCZIApiError { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, "LibCZIApi {self:?}") } } /// enum for SubBlock.get_raw_data pub enum RawDataType { Data, Metadata, } /// pixel type pub enum PixelType { Gray8, Gray16, Gray32Float, Bgr24, Bgr48, Bgr96Float, Bgra32, Gray64ComplexFloat, Bgr192ComplexFloat, Gray32, Gray64Float, } impl TryFrom for PixelType { type Error = Error; fn try_from(pixel_type: i32) -> Result { match pixel_type { 0 => Ok(PixelType::Gray8), 1 => Ok(PixelType::Gray16), 2 => Ok(PixelType::Gray32Float), 3 => Ok(PixelType::Bgr24), 4 => Ok(PixelType::Bgr48), 8 => Ok(PixelType::Bgr96Float), 9 => Ok(PixelType::Bgra32), 10 => Ok(PixelType::Gray64ComplexFloat), 11 => Ok(PixelType::Bgr192ComplexFloat), 12 => Ok(PixelType::Gray32), 13 => Ok(PixelType::Gray64Float), _ => Err(anyhow!("Unknown pixel type {}", pixel_type)), } } } impl From for i32 { fn from(pixel_type: PixelType) -> Self { match pixel_type { PixelType::Gray8 => 0, PixelType::Gray16 => 1, PixelType::Gray32Float => 2, PixelType::Bgr24 => 3, PixelType::Bgr48 => 4, PixelType::Bgr96Float => 8, PixelType::Bgra32 => 9, PixelType::Gray64ComplexFloat => 10, PixelType::Bgr192ComplexFloat => 11, PixelType::Gray32 => 12, PixelType::Gray64Float => 13, } } } pub trait Ptr { type Pointer; unsafe fn assume_init(ptr: MaybeUninit) -> Self; fn as_mut_ptr(&self) -> *mut Self::Pointer where Self: Sized; fn as_ptr(&self) -> *const Self::Pointer where Self: Sized; }