gstreamer_validate/
enums.rs

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