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        skip_assert_initialized!();
107
108        if !(ffi::GST_VALIDATE_EXECUTE_ACTION_ERROR..=ffi::GST_VALIDATE_EXECUTE_ACTION_DONE)
109            .contains(&value)
110        {
111            ActionReturn::Error
112        } else {
113            std::mem::transmute::<i32, ActionReturn>(value)
114        }
115    }
116}
117
118impl TryFromGlib<ffi::GstValidateActionReturn> for ActionSuccess {
119    type Error = ActionError;
120
121    #[inline]
122    unsafe fn try_from_glib(
123        val: ffi::GstValidateActionReturn,
124    ) -> Result<ActionSuccess, ActionError> {
125        skip_assert_initialized!();
126        ActionReturn::from_glib(val).into_result()
127    }
128}
129
130impl ActionReturn {
131    #[inline]
132    pub fn into_result(self) -> Result<ActionSuccess, ActionError> {
133        match self {
134            Self::Error | Self::ErrorReported => {
135                Err(ActionError::Error("Execution failed".to_string()))
136            }
137            _ => Ok(unsafe { std::mem::transmute::<ActionReturn, ActionSuccess>(self) }),
138        }
139    }
140
141    #[inline]
142    pub fn from_error(v: ActionError) -> Self {
143        skip_assert_initialized!();
144
145        match v {
146            ActionError::Error(_) => Self::Error,
147        }
148    }
149
150    #[inline]
151    pub fn from_ok(v: ActionSuccess) -> Self {
152        skip_assert_initialized!();
153        unsafe { std::mem::transmute::<ActionSuccess, ActionReturn>(v) }
154    }
155}