1use thiserror::Error;
4
5#[derive(Debug, Error)]
7pub enum CcapError {
8 #[error("No error")]
10 None,
11
12 #[error("No camera device found")]
14 NoDeviceFound,
15
16 #[error("Invalid device: {0}")]
18 InvalidDevice(String),
19
20 #[error("Camera device open failed")]
22 DeviceOpenFailed,
23
24 #[error("Device already opened")]
26 DeviceAlreadyOpened,
27
28 #[error("Device not opened")]
30 DeviceNotOpened,
31
32 #[error("Capture start failed")]
34 CaptureStartFailed,
35
36 #[error("Capture stop failed")]
38 CaptureStopFailed,
39
40 #[error("Frame grab failed")]
42 FrameGrabFailed,
43
44 #[error("Timeout occurred")]
46 Timeout,
47
48 #[error("Invalid parameter: {0}")]
50 InvalidParameter(String),
51
52 #[error("Operation not supported")]
54 NotSupported,
55
56 #[error("Backend set failed")]
58 BackendSetFailed,
59
60 #[error("String conversion error: {0}")]
62 StringConversionError(String),
63
64 #[error("File operation failed: {0}")]
66 FileOperationFailed(String),
67
68 #[error("Device not found")]
70 DeviceNotFound,
71
72 #[error("Internal error: {0}")]
74 InternalError(String),
75
76 #[error("Unknown error: {code}")]
78 Unknown {
79 code: i32,
81 },
82}
83
84impl From<i32> for CcapError {
85 fn from(code: i32) -> Self {
86 use crate::sys::*;
87
88 let code_u = code as CcapErrorCode;
91
92 #[allow(non_upper_case_globals)]
93 match code_u {
94 CcapErrorCode_CCAP_ERROR_NONE => CcapError::None,
95 CcapErrorCode_CCAP_ERROR_NO_DEVICE_FOUND => CcapError::NoDeviceFound,
96 CcapErrorCode_CCAP_ERROR_INVALID_DEVICE => CcapError::InvalidDevice("".to_string()),
97 CcapErrorCode_CCAP_ERROR_DEVICE_OPEN_FAILED => CcapError::DeviceOpenFailed,
98 CcapErrorCode_CCAP_ERROR_DEVICE_START_FAILED => CcapError::CaptureStartFailed,
99 CcapErrorCode_CCAP_ERROR_DEVICE_STOP_FAILED => CcapError::CaptureStopFailed,
100 CcapErrorCode_CCAP_ERROR_FRAME_CAPTURE_FAILED => CcapError::FrameGrabFailed,
101 CcapErrorCode_CCAP_ERROR_FRAME_CAPTURE_TIMEOUT => CcapError::Timeout,
102 CcapErrorCode_CCAP_ERROR_UNSUPPORTED_PIXEL_FORMAT => CcapError::NotSupported,
103 CcapErrorCode_CCAP_ERROR_UNSUPPORTED_RESOLUTION => CcapError::NotSupported,
104 CcapErrorCode_CCAP_ERROR_PROPERTY_SET_FAILED => {
105 CcapError::InvalidParameter("".to_string())
106 }
107 CcapErrorCode_CCAP_ERROR_MEMORY_ALLOCATION_FAILED => CcapError::Unknown { code },
108 CcapErrorCode_CCAP_ERROR_INTERNAL_ERROR => CcapError::Unknown { code },
109 _ => CcapError::Unknown { code },
110 }
111 }
112}
113
114pub type Result<T> = std::result::Result<T, CcapError>;