1use glib::{translate::*, value::FromValue, Value};
4
5use crate::ffi;
6
7glib::wrapper! {
8 #[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
13 #[doc(alias = "GtkExpressionWatch")]
14 pub struct ExpressionWatch(Shared<ffi::GtkExpressionWatch>);
15
16 match fn {
17 ref => |ptr| ffi::gtk_expression_watch_ref(ptr),
18 unref => |ptr| ffi::gtk_expression_watch_unref(ptr),
19 }
20}
21
22impl ExpressionWatch {
23 #[doc(alias = "gtk_expression_watch_evaluate")]
35 pub fn evaluate(&self) -> Option<Value> {
36 assert_initialized_main_thread!();
37 unsafe {
38 let mut value = Value::uninitialized();
39 let ret = ffi::gtk_expression_watch_evaluate(
40 self.to_glib_none().0,
41 value.to_glib_none_mut().0,
42 );
43 if from_glib(ret) {
44 Some(value)
45 } else {
46 None
47 }
48 }
49 }
50
51 #[doc(alias = "gtk_expression_evaluate")]
55 pub fn evaluate_as<V: for<'b> FromValue<'b> + 'static>(&self) -> Option<V> {
56 self.evaluate().map(|v| {
57 v.get_owned::<V>()
58 .expect("Failed to evaluate to this value type")
59 })
60 }
61
62 #[doc(alias = "gtk_expression_watch_unwatch")]
67 pub fn unwatch(&self) {
68 unsafe { ffi::gtk_expression_watch_unwatch(self.to_glib_none().0) }
69 }
70}
71
72#[cfg(feature = "v4_2")]
73impl glib::prelude::StaticType for ExpressionWatch {
74 #[doc(alias = "gtk_expression_watch_get_type")]
75 #[inline]
76 fn static_type() -> glib::Type {
77 unsafe { from_glib(ffi::gtk_expression_watch_get_type()) }
78 }
79}