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}