gstreamer_validate/
enums.rs
1use 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}