azure_kinect/
error.rs

1#![allow(non_upper_case_globals)]
2
3use azure_kinect_sys::k4a::*;
4use azure_kinect_sys::k4arecord::k4a_stream_result_t;
5
6#[derive(Clone, Copy, Debug)]
7pub enum Error {
8    Succeeded,
9    Failed,
10    TooSmall,
11    Timeout,
12    Win32Error(u32),
13    Eof,
14}
15
16impl Error {
17    pub(crate) fn from_k4a_result_t(s: k4a_result_t) -> Error {
18        match s {
19            k4a_result_t_K4A_RESULT_SUCCEEDED => Error::Succeeded,
20            k4a_result_t_K4A_RESULT_FAILED => Error::Failed,
21            _ => Error::Failed,
22        }
23    }
24
25    pub(crate) fn from_k4a_buffer_result_t(s: k4a_buffer_result_t) -> Error {
26        match s {
27            k4a_buffer_result_t_K4A_BUFFER_RESULT_SUCCEEDED => Error::Succeeded,
28            k4a_buffer_result_t_K4A_BUFFER_RESULT_FAILED => Error::Failed,
29            k4a_buffer_result_t_K4A_BUFFER_RESULT_TOO_SMALL => Error::TooSmall,
30            _ => Error::Failed,
31        }
32    }
33
34    pub(crate) fn from_k4a_wait_result_t(s: k4a_wait_result_t) -> Error {
35        match s {
36            k4a_wait_result_t_K4A_WAIT_RESULT_SUCCEEDED => Error::Succeeded,
37            k4a_wait_result_t_K4A_WAIT_RESULT_FAILED => Error::Failed,
38            k4a_wait_result_t_K4A_WAIT_RESULT_TIMEOUT => Error::Timeout,
39            _ => Error::Failed,
40        }
41    }
42
43    pub(crate) fn from_k4a_stream_result_t(s: k4a_stream_result_t) -> Error {
44        match s {
45            azure_kinect_sys::k4arecord::k4a_stream_result_t_K4A_STREAM_RESULT_SUCCEEDED => {
46                Error::Succeeded
47            }
48            azure_kinect_sys::k4arecord::k4a_stream_result_t_K4A_STREAM_RESULT_FAILED => {
49                Error::Failed
50            }
51            azure_kinect_sys::k4arecord::k4a_stream_result_t_K4A_STREAM_RESULT_EOF => Error::Eof,
52            _ => Error::Failed,
53        }
54    }
55
56    pub(crate) fn to_result<T>(self, ok: T) -> Result<T, Error> {
57        match self {
58            Error::Succeeded => Ok(ok),
59            _ => Err(self),
60        }
61    }
62
63    pub(crate) fn to_result_fn<T, F: FnOnce() -> T>(self, ok: F) -> Result<T, Error> {
64        match self {
65            Error::Succeeded => Ok(ok()),
66            _ => Err(self),
67        }
68    }
69}
70
71impl From<azure_kinect_sys::Error> for Error {
72    fn from(e: azure_kinect_sys::Error) -> Self {
73        match e {
74            azure_kinect_sys::Error::Failed => Self::Failed,
75            azure_kinect_sys::Error::Win32Error(code) => Self::Win32Error(code),
76        }
77    }
78}
79
80impl std::error::Error for Error {}
81
82impl std::fmt::Display for Error {
83    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
84        write!(f, "{:?}", self)
85    }
86}
87
88pub(crate) trait ToResult: Sized {
89    fn to_result(&self) -> Result<Self, Error>;
90}