1use crate::{ffi, QueryFlags, Silo};
7use glib::{prelude::*, translate::*};
8
9glib::wrapper! {
10 #[doc(alias = "XbQuery")]
11 pub struct Query(Object<ffi::XbQuery, ffi::XbQueryClass>);
12
13 match fn {
14 type_ => || ffi::xb_query_get_type(),
15 }
16}
17
18impl Query {
19 pub const NONE: Option<&'static Query> = None;
20
21 #[doc(alias = "xb_query_new")]
22 pub fn new(silo: &impl IsA<Silo>, xpath: &str) -> Result<Query, glib::Error> {
23 skip_assert_initialized!();
24 unsafe {
25 let mut error = std::ptr::null_mut();
26 let ret = ffi::xb_query_new(
27 silo.as_ref().to_glib_none().0,
28 xpath.to_glib_none().0,
29 &mut error,
30 );
31 if error.is_null() {
32 Ok(from_glib_full(ret))
33 } else {
34 Err(from_glib_full(error))
35 }
36 }
37 }
38
39 #[doc(alias = "xb_query_new_full")]
40 pub fn new_full(
41 silo: &impl IsA<Silo>,
42 xpath: &str,
43 flags: QueryFlags,
44 ) -> Result<Query, glib::Error> {
45 skip_assert_initialized!();
46 unsafe {
47 let mut error = std::ptr::null_mut();
48 let ret = ffi::xb_query_new_full(
49 silo.as_ref().to_glib_none().0,
50 xpath.to_glib_none().0,
51 flags.into_glib(),
52 &mut error,
53 );
54 if error.is_null() {
55 Ok(from_glib_full(ret))
56 } else {
57 Err(from_glib_full(error))
58 }
59 }
60 }
61}
62
63mod sealed {
64 pub trait Sealed {}
65 impl<T: super::IsA<super::Query>> Sealed for T {}
66}
67
68pub trait QueryExt: IsA<Query> + sealed::Sealed + 'static {
69 #[doc(alias = "xb_query_get_xpath")]
70 #[doc(alias = "get_xpath")]
71 fn xpath(&self) -> glib::GString {
72 unsafe { from_glib_none(ffi::xb_query_get_xpath(self.as_ref().to_glib_none().0)) }
73 }
74}
75
76impl<O: IsA<Query>> QueryExt for O {}