1use crate::ffi;
7use glib::{prelude::*, translate::*};
8
9glib::wrapper! {
10 #[doc(alias = "GstPreset")]
11 pub struct Preset(Interface<ffi::GstPreset, ffi::GstPresetInterface>);
12
13 match fn {
14 type_ => || ffi::gst_preset_get_type(),
15 }
16}
17
18impl Preset {
19 pub const NONE: Option<&'static Preset> = None;
20
21 #[doc(alias = "gst_preset_get_app_dir")]
22 #[doc(alias = "get_app_dir")]
23 pub fn app_dir() -> Option<std::path::PathBuf> {
24 assert_initialized_main_thread!();
25 unsafe { from_glib_none(ffi::gst_preset_get_app_dir()) }
26 }
27
28 #[doc(alias = "gst_preset_set_app_dir")]
29 pub fn set_app_dir(app_dir: impl AsRef<std::path::Path>) -> Result<(), glib::error::BoolError> {
30 assert_initialized_main_thread!();
31 unsafe {
32 glib::result_from_gboolean!(
33 ffi::gst_preset_set_app_dir(app_dir.as_ref().to_glib_none().0),
34 "Failed to set app preset directory"
35 )
36 }
37 }
38}
39
40unsafe impl Send for Preset {}
41unsafe impl Sync for Preset {}
42
43pub trait PresetExt: IsA<Preset> + 'static {
44 #[doc(alias = "gst_preset_delete_preset")]
45 fn delete_preset(&self, name: &str) -> Result<(), glib::error::BoolError> {
46 unsafe {
47 glib::result_from_gboolean!(
48 ffi::gst_preset_delete_preset(
49 self.as_ref().to_glib_none().0,
50 name.to_glib_none().0
51 ),
52 "Failed to delete preset"
53 )
54 }
55 }
56
57 #[doc(alias = "gst_preset_get_meta")]
58 #[doc(alias = "get_meta")]
59 fn meta(&self, name: &str, tag: &str) -> Option<glib::GString> {
60 unsafe {
61 let mut value = std::ptr::null_mut();
62 let ret = from_glib(ffi::gst_preset_get_meta(
63 self.as_ref().to_glib_none().0,
64 name.to_glib_none().0,
65 tag.to_glib_none().0,
66 &mut value,
67 ));
68 if ret {
69 Some(from_glib_full(value))
70 } else {
71 None
72 }
73 }
74 }
75
76 #[doc(alias = "gst_preset_get_preset_names")]
77 #[doc(alias = "get_preset_names")]
78 fn preset_names(&self) -> Vec<glib::GString> {
79 unsafe {
80 FromGlibPtrContainer::from_glib_full(ffi::gst_preset_get_preset_names(
81 self.as_ref().to_glib_none().0,
82 ))
83 }
84 }
85
86 #[doc(alias = "gst_preset_get_property_names")]
87 #[doc(alias = "get_property_names")]
88 fn property_names(&self) -> Vec<glib::GString> {
89 unsafe {
90 FromGlibPtrContainer::from_glib_full(ffi::gst_preset_get_property_names(
91 self.as_ref().to_glib_none().0,
92 ))
93 }
94 }
95
96 #[doc(alias = "gst_preset_is_editable")]
97 fn is_editable(&self) -> bool {
98 unsafe { from_glib(ffi::gst_preset_is_editable(self.as_ref().to_glib_none().0)) }
99 }
100
101 #[doc(alias = "gst_preset_load_preset")]
102 fn load_preset(&self, name: &str) -> Result<(), glib::error::BoolError> {
103 unsafe {
104 glib::result_from_gboolean!(
105 ffi::gst_preset_load_preset(self.as_ref().to_glib_none().0, name.to_glib_none().0),
106 "Failed to load preset"
107 )
108 }
109 }
110
111 #[doc(alias = "gst_preset_rename_preset")]
112 fn rename_preset(&self, old_name: &str, new_name: &str) -> Result<(), glib::error::BoolError> {
113 unsafe {
114 glib::result_from_gboolean!(
115 ffi::gst_preset_rename_preset(
116 self.as_ref().to_glib_none().0,
117 old_name.to_glib_none().0,
118 new_name.to_glib_none().0
119 ),
120 "Failed to rename preset"
121 )
122 }
123 }
124
125 #[doc(alias = "gst_preset_save_preset")]
126 fn save_preset(&self, name: &str) -> Result<(), glib::error::BoolError> {
127 unsafe {
128 glib::result_from_gboolean!(
129 ffi::gst_preset_save_preset(self.as_ref().to_glib_none().0, name.to_glib_none().0),
130 "Failed to save preset"
131 )
132 }
133 }
134
135 #[doc(alias = "gst_preset_set_meta")]
136 fn set_meta(
137 &self,
138 name: &str,
139 tag: &str,
140 value: Option<&str>,
141 ) -> Result<(), glib::error::BoolError> {
142 unsafe {
143 glib::result_from_gboolean!(
144 ffi::gst_preset_set_meta(
145 self.as_ref().to_glib_none().0,
146 name.to_glib_none().0,
147 tag.to_glib_none().0,
148 value.to_glib_none().0
149 ),
150 "Failed to set preset meta"
151 )
152 }
153 }
154}
155
156impl<O: IsA<Preset>> PresetExt for O {}