pango/
enums.rs

1// Take a look at the license at the top of the repository in the LICENSE file.
2
3#[cfg(feature = "v1_50")]
4use crate::ffi;
5#[cfg(feature = "v1_50")]
6use glib::{prelude::*, translate::*, Quark};
7
8/// Errors that can be returned by `Pango::Layout::deserialize()`.
9#[cfg(feature = "v1_50")]
10#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
11#[non_exhaustive]
12#[doc(alias = "PangoLayoutDeserializeError")]
13pub enum LayoutDeserializeError {
14    /// Unspecified error
15    #[doc(alias = "PANGO_LAYOUT_DESERIALIZE_INVALID")]
16    Invalid,
17    /// A JSon value could not be
18    ///   interpreted
19    #[doc(alias = "PANGO_LAYOUT_DESERIALIZE_INVALID_VALUE")]
20    InvalidValue,
21    /// A required JSon member was
22    ///   not found
23    #[doc(alias = "PANGO_LAYOUT_DESERIALIZE_MISSING_VALUE")]
24    MissingValue,
25    #[doc(hidden)]
26    __Unknown(i32),
27}
28
29#[cfg(feature = "v1_50")]
30#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
31#[doc(hidden)]
32impl IntoGlib for LayoutDeserializeError {
33    type GlibType = ffi::PangoLayoutDeserializeError;
34
35    #[inline]
36    fn into_glib(self) -> ffi::PangoLayoutDeserializeError {
37        match self {
38            Self::Invalid => ffi::PANGO_LAYOUT_DESERIALIZE_INVALID,
39            Self::InvalidValue => ffi::PANGO_LAYOUT_DESERIALIZE_INVALID_VALUE,
40            Self::MissingValue => ffi::PANGO_LAYOUT_DESERIALIZE_MISSING_VALUE,
41            Self::__Unknown(value) => value,
42        }
43    }
44}
45
46#[cfg(feature = "v1_50")]
47#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
48#[doc(hidden)]
49impl FromGlib<ffi::PangoLayoutDeserializeError> for LayoutDeserializeError {
50    #[inline]
51    unsafe fn from_glib(value: ffi::PangoLayoutDeserializeError) -> Self {
52        match value {
53            ffi::PANGO_LAYOUT_DESERIALIZE_INVALID => Self::Invalid,
54            ffi::PANGO_LAYOUT_DESERIALIZE_INVALID_VALUE => Self::InvalidValue,
55            ffi::PANGO_LAYOUT_DESERIALIZE_MISSING_VALUE => Self::MissingValue,
56            value => Self::__Unknown(value),
57        }
58    }
59}
60
61#[cfg(feature = "v1_50")]
62#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
63impl ErrorDomain for LayoutDeserializeError {
64    // TODO: figure out why gir picks a non-existent quark function
65    #[doc(alias = "pango_layout_deserialize_error_quark")]
66    fn domain() -> Quark {
67        unsafe { from_glib(ffi::pango_layout_deserialize_error_quark()) }
68    }
69
70    fn code(self) -> i32 {
71        self.into_glib()
72    }
73
74    fn from(code: i32) -> Option<Self> {
75        match code {
76            ffi::PANGO_LAYOUT_DESERIALIZE_INVALID => Some(Self::Invalid),
77            ffi::PANGO_LAYOUT_DESERIALIZE_INVALID_VALUE => Some(Self::InvalidValue),
78            ffi::PANGO_LAYOUT_DESERIALIZE_MISSING_VALUE => Some(Self::MissingValue),
79            value => Some(Self::__Unknown(value)),
80        }
81    }
82}
83
84#[cfg(feature = "v1_50")]
85#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
86impl StaticType for LayoutDeserializeError {
87    #[inline]
88    fn static_type() -> glib::Type {
89        unsafe { from_glib(ffi::pango_layout_deserialize_error_get_type()) }
90    }
91}
92
93#[cfg(feature = "v1_50")]
94#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
95impl glib::value::ValueType for LayoutDeserializeError {
96    type Type = Self;
97}
98
99#[cfg(feature = "v1_50")]
100#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
101unsafe impl<'a> glib::value::FromValue<'a> for LayoutDeserializeError {
102    type Checker = glib::value::GenericValueTypeChecker<Self>;
103
104    unsafe fn from_value(value: &'a glib::Value) -> Self {
105        from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0))
106    }
107}
108
109#[cfg(feature = "v1_50")]
110#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
111impl ToValue for LayoutDeserializeError {
112    fn to_value(&self) -> glib::Value {
113        let mut value = glib::Value::for_value_type::<Self>();
114        unsafe {
115            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
116        }
117        value
118    }
119
120    fn value_type(&self) -> glib::Type {
121        Self::static_type()
122    }
123}
124
125#[cfg(feature = "v1_50")]
126#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
127impl From<LayoutDeserializeError> for glib::Value {
128    #[inline]
129    fn from(v: LayoutDeserializeError) -> Self {
130        v.to_value()
131    }
132}