1use crate::{ffi, translate::*, Bytes, Error, KeyFileFlags};
6
7crate::wrapper! {
8 #[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
9 pub struct KeyFile(Shared<ffi::GKeyFile>);
10
11 match fn {
12 ref => |ptr| ffi::g_key_file_ref(ptr),
13 unref => |ptr| ffi::g_key_file_unref(ptr),
14 type_ => || ffi::g_key_file_get_type(),
15 }
16}
17
18impl KeyFile {
19 #[doc(alias = "g_key_file_new")]
20 pub fn new() -> KeyFile {
21 unsafe { from_glib_full(ffi::g_key_file_new()) }
22 }
23
24 #[doc(alias = "g_key_file_get_comment")]
25 #[doc(alias = "get_comment")]
26 pub fn comment(
27 &self,
28 group_name: Option<&str>,
29 key: Option<&str>,
30 ) -> Result<crate::GString, crate::Error> {
31 unsafe {
32 let mut error = std::ptr::null_mut();
33 let ret = ffi::g_key_file_get_comment(
34 self.to_glib_none().0,
35 group_name.to_glib_none().0,
36 key.to_glib_none().0,
37 &mut error,
38 );
39 if error.is_null() {
40 Ok(from_glib_full(ret))
41 } else {
42 Err(from_glib_full(error))
43 }
44 }
45 }
46
47 #[doc(alias = "g_key_file_get_double")]
48 #[doc(alias = "get_double")]
49 pub fn double(&self, group_name: &str, key: &str) -> Result<f64, crate::Error> {
50 unsafe {
51 let mut error = std::ptr::null_mut();
52 let ret = ffi::g_key_file_get_double(
53 self.to_glib_none().0,
54 group_name.to_glib_none().0,
55 key.to_glib_none().0,
56 &mut error,
57 );
58 if error.is_null() {
59 Ok(ret)
60 } else {
61 Err(from_glib_full(error))
62 }
63 }
64 }
65
66 #[doc(alias = "g_key_file_get_double_list")]
67 #[doc(alias = "get_double_list")]
68 pub fn double_list(&self, group_name: &str, key: &str) -> Result<Vec<f64>, crate::Error> {
69 unsafe {
70 let mut length = std::mem::MaybeUninit::uninit();
71 let mut error = std::ptr::null_mut();
72 let ret = ffi::g_key_file_get_double_list(
73 self.to_glib_none().0,
74 group_name.to_glib_none().0,
75 key.to_glib_none().0,
76 length.as_mut_ptr(),
77 &mut error,
78 );
79 if error.is_null() {
80 Ok(FromGlibContainer::from_glib_container_num(
81 ret,
82 length.assume_init() as _,
83 ))
84 } else {
85 Err(from_glib_full(error))
86 }
87 }
88 }
89
90 #[doc(alias = "g_key_file_get_int64")]
91 #[doc(alias = "get_int64")]
92 pub fn int64(&self, group_name: &str, key: &str) -> Result<i64, crate::Error> {
93 unsafe {
94 let mut error = std::ptr::null_mut();
95 let ret = ffi::g_key_file_get_int64(
96 self.to_glib_none().0,
97 group_name.to_glib_none().0,
98 key.to_glib_none().0,
99 &mut error,
100 );
101 if error.is_null() {
102 Ok(ret)
103 } else {
104 Err(from_glib_full(error))
105 }
106 }
107 }
108
109 #[doc(alias = "g_key_file_get_integer")]
110 #[doc(alias = "get_integer")]
111 pub fn integer(&self, group_name: &str, key: &str) -> Result<i32, crate::Error> {
112 unsafe {
113 let mut error = std::ptr::null_mut();
114 let ret = ffi::g_key_file_get_integer(
115 self.to_glib_none().0,
116 group_name.to_glib_none().0,
117 key.to_glib_none().0,
118 &mut error,
119 );
120 if error.is_null() {
121 Ok(ret)
122 } else {
123 Err(from_glib_full(error))
124 }
125 }
126 }
127
128 #[doc(alias = "g_key_file_get_integer_list")]
129 #[doc(alias = "get_integer_list")]
130 pub fn integer_list(&self, group_name: &str, key: &str) -> Result<Vec<i32>, crate::Error> {
131 unsafe {
132 let mut length = std::mem::MaybeUninit::uninit();
133 let mut error = std::ptr::null_mut();
134 let ret = ffi::g_key_file_get_integer_list(
135 self.to_glib_none().0,
136 group_name.to_glib_none().0,
137 key.to_glib_none().0,
138 length.as_mut_ptr(),
139 &mut error,
140 );
141 if error.is_null() {
142 Ok(FromGlibContainer::from_glib_container_num(
143 ret,
144 length.assume_init() as _,
145 ))
146 } else {
147 Err(from_glib_full(error))
148 }
149 }
150 }
151
152 #[doc(alias = "g_key_file_get_locale_for_key")]
153 #[doc(alias = "get_locale_for_key")]
154 pub fn locale_for_key(
155 &self,
156 group_name: &str,
157 key: &str,
158 locale: Option<&str>,
159 ) -> Option<crate::GString> {
160 unsafe {
161 from_glib_full(ffi::g_key_file_get_locale_for_key(
162 self.to_glib_none().0,
163 group_name.to_glib_none().0,
164 key.to_glib_none().0,
165 locale.to_glib_none().0,
166 ))
167 }
168 }
169
170 #[doc(alias = "g_key_file_get_start_group")]
171 #[doc(alias = "get_start_group")]
172 pub fn start_group(&self) -> Option<crate::GString> {
173 unsafe { from_glib_full(ffi::g_key_file_get_start_group(self.to_glib_none().0)) }
174 }
175
176 #[doc(alias = "g_key_file_get_uint64")]
177 #[doc(alias = "get_uint64")]
178 pub fn uint64(&self, group_name: &str, key: &str) -> Result<u64, crate::Error> {
179 unsafe {
180 let mut error = std::ptr::null_mut();
181 let ret = ffi::g_key_file_get_uint64(
182 self.to_glib_none().0,
183 group_name.to_glib_none().0,
184 key.to_glib_none().0,
185 &mut error,
186 );
187 if error.is_null() {
188 Ok(ret)
189 } else {
190 Err(from_glib_full(error))
191 }
192 }
193 }
194
195 #[doc(alias = "g_key_file_get_value")]
196 #[doc(alias = "get_value")]
197 pub fn value(&self, group_name: &str, key: &str) -> Result<crate::GString, crate::Error> {
198 unsafe {
199 let mut error = std::ptr::null_mut();
200 let ret = ffi::g_key_file_get_value(
201 self.to_glib_none().0,
202 group_name.to_glib_none().0,
203 key.to_glib_none().0,
204 &mut error,
205 );
206 if error.is_null() {
207 Ok(from_glib_full(ret))
208 } else {
209 Err(from_glib_full(error))
210 }
211 }
212 }
213
214 #[doc(alias = "g_key_file_has_group")]
215 pub fn has_group(&self, group_name: &str) -> bool {
216 unsafe {
217 from_glib(ffi::g_key_file_has_group(
218 self.to_glib_none().0,
219 group_name.to_glib_none().0,
220 ))
221 }
222 }
223
224 #[doc(alias = "g_key_file_load_from_bytes")]
225 pub fn load_from_bytes(&self, bytes: &Bytes, flags: KeyFileFlags) -> Result<(), crate::Error> {
226 unsafe {
227 let mut error = std::ptr::null_mut();
228 let is_ok = ffi::g_key_file_load_from_bytes(
229 self.to_glib_none().0,
230 bytes.to_glib_none().0,
231 flags.into_glib(),
232 &mut error,
233 );
234 debug_assert_eq!(is_ok == crate::ffi::GFALSE, !error.is_null());
235 if error.is_null() {
236 Ok(())
237 } else {
238 Err(from_glib_full(error))
239 }
240 }
241 }
242
243 #[doc(alias = "g_key_file_load_from_data")]
244 pub fn load_from_data(&self, data: &str, flags: KeyFileFlags) -> Result<(), crate::Error> {
245 let length = data.len() as _;
246 unsafe {
247 let mut error = std::ptr::null_mut();
248 let is_ok = ffi::g_key_file_load_from_data(
249 self.to_glib_none().0,
250 data.to_glib_none().0,
251 length,
252 flags.into_glib(),
253 &mut error,
254 );
255 debug_assert_eq!(is_ok == crate::ffi::GFALSE, !error.is_null());
256 if error.is_null() {
257 Ok(())
258 } else {
259 Err(from_glib_full(error))
260 }
261 }
262 }
263
264 #[doc(alias = "g_key_file_load_from_file")]
265 pub fn load_from_file(
266 &self,
267 file: impl AsRef<std::path::Path>,
268 flags: KeyFileFlags,
269 ) -> Result<(), crate::Error> {
270 unsafe {
271 let mut error = std::ptr::null_mut();
272 let is_ok = ffi::g_key_file_load_from_file(
273 self.to_glib_none().0,
274 file.as_ref().to_glib_none().0,
275 flags.into_glib(),
276 &mut error,
277 );
278 debug_assert_eq!(is_ok == crate::ffi::GFALSE, !error.is_null());
279 if error.is_null() {
280 Ok(())
281 } else {
282 Err(from_glib_full(error))
283 }
284 }
285 }
286
287 #[doc(alias = "g_key_file_remove_comment")]
288 pub fn remove_comment(
289 &self,
290 group_name: Option<&str>,
291 key: Option<&str>,
292 ) -> Result<(), crate::Error> {
293 unsafe {
294 let mut error = std::ptr::null_mut();
295 let is_ok = ffi::g_key_file_remove_comment(
296 self.to_glib_none().0,
297 group_name.to_glib_none().0,
298 key.to_glib_none().0,
299 &mut error,
300 );
301 debug_assert_eq!(is_ok == crate::ffi::GFALSE, !error.is_null());
302 if error.is_null() {
303 Ok(())
304 } else {
305 Err(from_glib_full(error))
306 }
307 }
308 }
309
310 #[doc(alias = "g_key_file_remove_group")]
311 pub fn remove_group(&self, group_name: &str) -> Result<(), crate::Error> {
312 unsafe {
313 let mut error = std::ptr::null_mut();
314 let is_ok = ffi::g_key_file_remove_group(
315 self.to_glib_none().0,
316 group_name.to_glib_none().0,
317 &mut error,
318 );
319 debug_assert_eq!(is_ok == crate::ffi::GFALSE, !error.is_null());
320 if error.is_null() {
321 Ok(())
322 } else {
323 Err(from_glib_full(error))
324 }
325 }
326 }
327
328 #[doc(alias = "g_key_file_remove_key")]
329 pub fn remove_key(&self, group_name: &str, key: &str) -> Result<(), crate::Error> {
330 unsafe {
331 let mut error = std::ptr::null_mut();
332 let is_ok = ffi::g_key_file_remove_key(
333 self.to_glib_none().0,
334 group_name.to_glib_none().0,
335 key.to_glib_none().0,
336 &mut error,
337 );
338 debug_assert_eq!(is_ok == crate::ffi::GFALSE, !error.is_null());
339 if error.is_null() {
340 Ok(())
341 } else {
342 Err(from_glib_full(error))
343 }
344 }
345 }
346
347 #[doc(alias = "g_key_file_set_boolean")]
348 pub fn set_boolean(&self, group_name: &str, key: &str, value: bool) {
349 unsafe {
350 ffi::g_key_file_set_boolean(
351 self.to_glib_none().0,
352 group_name.to_glib_none().0,
353 key.to_glib_none().0,
354 value.into_glib(),
355 );
356 }
357 }
358
359 #[doc(alias = "g_key_file_set_comment")]
365 pub fn set_comment(
366 &self,
367 group_name: Option<&str>,
368 key: Option<&str>,
369 comment: &str,
370 ) -> Result<(), crate::Error> {
371 unsafe {
372 let mut error = std::ptr::null_mut();
373 let is_ok = ffi::g_key_file_set_comment(
374 self.to_glib_none().0,
375 group_name.to_glib_none().0,
376 key.to_glib_none().0,
377 comment.to_glib_none().0,
378 &mut error,
379 );
380 debug_assert_eq!(is_ok == crate::ffi::GFALSE, !error.is_null());
381 if error.is_null() {
382 Ok(())
383 } else {
384 Err(from_glib_full(error))
385 }
386 }
387 }
388
389 #[doc(alias = "g_key_file_set_double")]
390 pub fn set_double(&self, group_name: &str, key: &str, value: f64) {
391 unsafe {
392 ffi::g_key_file_set_double(
393 self.to_glib_none().0,
394 group_name.to_glib_none().0,
395 key.to_glib_none().0,
396 value,
397 );
398 }
399 }
400
401 #[doc(alias = "g_key_file_set_int64")]
402 pub fn set_int64(&self, group_name: &str, key: &str, value: i64) {
403 unsafe {
404 ffi::g_key_file_set_int64(
405 self.to_glib_none().0,
406 group_name.to_glib_none().0,
407 key.to_glib_none().0,
408 value,
409 );
410 }
411 }
412
413 #[doc(alias = "g_key_file_set_integer")]
414 pub fn set_integer(&self, group_name: &str, key: &str, value: i32) {
415 unsafe {
416 ffi::g_key_file_set_integer(
417 self.to_glib_none().0,
418 group_name.to_glib_none().0,
419 key.to_glib_none().0,
420 value,
421 );
422 }
423 }
424
425 #[doc(alias = "g_key_file_set_list_separator")]
426 pub fn set_list_separator(&self, separator: crate::Char) {
427 unsafe {
428 ffi::g_key_file_set_list_separator(self.to_glib_none().0, separator.into_glib());
429 }
430 }
431
432 #[doc(alias = "g_key_file_set_locale_string")]
433 pub fn set_locale_string(&self, group_name: &str, key: &str, locale: &str, string: &str) {
434 unsafe {
435 ffi::g_key_file_set_locale_string(
436 self.to_glib_none().0,
437 group_name.to_glib_none().0,
438 key.to_glib_none().0,
439 locale.to_glib_none().0,
440 string.to_glib_none().0,
441 );
442 }
443 }
444
445 #[doc(alias = "g_key_file_set_string")]
446 pub fn set_string(&self, group_name: &str, key: &str, string: &str) {
447 unsafe {
448 ffi::g_key_file_set_string(
449 self.to_glib_none().0,
450 group_name.to_glib_none().0,
451 key.to_glib_none().0,
452 string.to_glib_none().0,
453 );
454 }
455 }
456
457 #[doc(alias = "g_key_file_set_uint64")]
458 pub fn set_uint64(&self, group_name: &str, key: &str, value: u64) {
459 unsafe {
460 ffi::g_key_file_set_uint64(
461 self.to_glib_none().0,
462 group_name.to_glib_none().0,
463 key.to_glib_none().0,
464 value,
465 );
466 }
467 }
468
469 #[doc(alias = "g_key_file_set_value")]
470 pub fn set_value(&self, group_name: &str, key: &str, value: &str) {
471 unsafe {
472 ffi::g_key_file_set_value(
473 self.to_glib_none().0,
474 group_name.to_glib_none().0,
475 key.to_glib_none().0,
476 value.to_glib_none().0,
477 );
478 }
479 }
480}
481
482impl Default for KeyFile {
483 fn default() -> Self {
484 Self::new()
485 }
486}