glib_signal/
value_option.rs

1use glib::{value::ToValue, Value};
2
3pub trait ToValueOption: Sized {
4	type Type: Into<Self>;
5
6	fn to_value_option(self) -> Option<Value>;
7}
8
9pub struct PrimitiveValue<T>(T);
10impl<T> From<T> for PrimitiveValue<T> {
11	fn from(v: T) -> Self {
12		Self(v)
13	}
14}
15impl ToValueOption for PrimitiveValue<()> {
16	type Type = ();
17
18	fn to_value_option(self) -> Option<Value> {
19		None
20	}
21}
22impl ToValueOption for PrimitiveValue<usize> {
23	type Type = usize;
24
25	#[cfg(target_pointer_width = "16")]
26	fn to_value_option(self) -> Option<Value> {
27		Some((self.0 as u16).to_value())
28	}
29
30	#[cfg(target_pointer_width = "32")]
31	fn to_value_option(self) -> Option<Value> {
32		Some((self.0 as u32).to_value())
33	}
34
35	#[cfg(target_pointer_width = "64")]
36	fn to_value_option(self) -> Option<Value> {
37		Some((self.0 as u64).to_value())
38	}
39}
40
41impl<T: ToValue> ToValueOption for T {
42	type Type = T;
43
44	fn to_value_option(self) -> Option<Value> {
45		Some(ToValue::to_value(&self))
46	}
47}