Skip to main content

gstreamer_validate/
enums.rs

1// Take a look at the license at the top of the repository in the LICENSE file.
2
3use crate::ffi;
4use glib::translate::*;
5
6#[derive(Clone, Copy, Debug, Eq, PartialEq, Hash)]
7#[repr(i32)]
8pub enum ActionSuccess {
9    Ok = ffi::GST_VALIDATE_EXECUTE_ACTION_OK,
10    Async = ffi::GST_VALIDATE_EXECUTE_ACTION_ASYNC,
11    NonBlocking = ffi::GST_VALIDATE_EXECUTE_ACTION_NON_BLOCKING,
12    InProgress = ffi::GST_VALIDATE_EXECUTE_ACTION_IN_PROGRESS,
13    Done = ffi::GST_VALIDATE_EXECUTE_ACTION_DONE,
14}
15
16impl ActionSuccess {
17    pub fn from_value(value: impl Into<i32>) -> Option<Self> {
18        skip_assert_initialized!();
19        Some(match value.into() {
20            ffi::GST_VALIDATE_EXECUTE_ACTION_OK => ActionSuccess::Ok,
21            ffi::GST_VALIDATE_EXECUTE_ACTION_ASYNC => ActionSuccess::Async,
22            ffi::GST_VALIDATE_EXECUTE_ACTION_NON_BLOCKING => ActionSuccess::NonBlocking,
23            ffi::GST_VALIDATE_EXECUTE_ACTION_IN_PROGRESS => ActionSuccess::InProgress,
24            ffi::GST_VALIDATE_EXECUTE_ACTION_DONE => ActionSuccess::Done,
25            _ => return None,
26        })
27    }
28}
29
30impl IntoGlib for ActionSuccess {
31    type GlibType = ffi::GstValidateActionReturn;
32
33    #[inline]
34    fn into_glib(self) -> ffi::GstValidateActionReturn {
35        skip_assert_initialized!();
36        self as ffi::GstValidateActionReturn
37    }
38}
39
40#[derive(Clone, Debug, Eq, PartialEq, Hash)]
41#[repr(i32)]
42pub enum ActionError {
43    Error(String),
44}
45
46impl ActionError {
47    pub fn from_value(value: impl Into<i32>) -> Self {
48        skip_assert_initialized!();
49        match value.into() {
50            ffi::GST_VALIDATE_EXECUTE_ACTION_ERROR => {
51                ActionError::Error("Execution failed".to_string())
52            }
53            _ => ActionError::Error("Unknown error".to_string()),
54        }
55    }
56}
57
58impl IntoGlib for ActionError {
59    type GlibType = ffi::GstValidateActionReturn;
60
61    #[inline]
62    fn into_glib(self) -> ffi::GstValidateActionReturn {
63        match self {
64            ActionError::Error(_) => ffi::GST_VALIDATE_EXECUTE_ACTION_ERROR,
65        }
66    }
67}
68
69#[must_use]
70#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
71#[doc(alias = "GstValidateActionReturn")]
72#[repr(i32)]
73pub enum ActionReturn {
74    #[doc(alias = "GST_VALIDATE_EXECUTE_ACTION_ERROR")]
75    Error = ffi::GST_VALIDATE_EXECUTE_ACTION_ERROR,
76    #[doc(alias = "GST_VALIDATE_EXECUTE_ACTION_OK")]
77    Ok = ffi::GST_VALIDATE_EXECUTE_ACTION_OK,
78    #[doc(alias = "GST_VALIDATE_EXECUTE_ACTION_ASYNC")]
79    Async = ffi::GST_VALIDATE_EXECUTE_ACTION_ASYNC,
80    #[doc(alias = "GST_VALIDATE_EXECUTE_ACTION_NON_BLOCKING")]
81    NonBlocking = ffi::GST_VALIDATE_EXECUTE_ACTION_NON_BLOCKING,
82    #[doc(alias = "GST_VALIDATE_EXECUTE_ACTION_ERROR_REPORTED")]
83    ErrorReported = ffi::GST_VALIDATE_EXECUTE_ACTION_ERROR_REPORTED,
84    #[doc(alias = "GST_VALIDATE_EXECUTE_ACTION_IN_PROGRESS")]
85    InProgress = ffi::GST_VALIDATE_EXECUTE_ACTION_IN_PROGRESS,
86    #[doc(alias = "GST_VALIDATE_EXECUTE_ACTION_NONE")]
87    None = ffi::GST_VALIDATE_EXECUTE_ACTION_NONE,
88    #[doc(alias = "GST_VALIDATE_EXECUTE_ACTION_DONE")]
89    Done = ffi::GST_VALIDATE_EXECUTE_ACTION_DONE,
90}
91
92#[doc(hidden)]
93impl IntoGlib for ActionReturn {
94    type GlibType = ffi::GstValidateActionReturn;
95
96    #[inline]
97    fn into_glib(self) -> ffi::GstValidateActionReturn {
98        self as ffi::GstValidateActionReturn
99    }
100}
101
102#[doc(hidden)]
103impl FromGlib<ffi::GstValidateActionReturn> for ActionReturn {
104    #[inline]
105    unsafe fn from_glib(value: ffi::GstValidateActionReturn) -> Self {
106        unsafe {
107            skip_assert_initialized!();
108
109            if !(ffi::GST_VALIDATE_EXECUTE_ACTION_ERROR..=ffi::GST_VALIDATE_EXECUTE_ACTION_DONE)
110                .contains(&value)
111            {
112                ActionReturn::Error
113            } else {
114                std::mem::transmute::<i32, ActionReturn>(value)
115            }
116        }
117    }
118}
119
120impl TryFromGlib<ffi::GstValidateActionReturn> for ActionSuccess {
121    type Error = ActionError;
122
123    #[inline]
124    unsafe fn try_from_glib(
125        val: ffi::GstValidateActionReturn,
126    ) -> Result<ActionSuccess, ActionError> {
127        unsafe {
128            skip_assert_initialized!();
129            ActionReturn::from_glib(val).into_result()
130        }
131    }
132}
133
134impl ActionReturn {
135    #[inline]
136    pub fn into_result(self) -> Result<ActionSuccess, ActionError> {
137        match self {
138            Self::Error | Self::ErrorReported => {
139                Err(ActionError::Error("Execution failed".to_string()))
140            }
141            _ => Ok(unsafe { std::mem::transmute::<ActionReturn, ActionSuccess>(self) }),
142        }
143    }
144
145    #[inline]
146    pub fn from_error(v: ActionError) -> Self {
147        skip_assert_initialized!();
148
149        match v {
150            ActionError::Error(_) => Self::Error,
151        }
152    }
153
154    #[inline]
155    pub fn from_ok(v: ActionSuccess) -> Self {
156        skip_assert_initialized!();
157        unsafe { std::mem::transmute::<ActionSuccess, ActionReturn>(v) }
158    }
159}