core_foundation/
boolean.rs1pub use core_foundation_sys::number::{
13 kCFBooleanFalse, kCFBooleanTrue, CFBooleanGetTypeID, CFBooleanRef,
14};
15
16use crate::base::TCFType;
17
18declare_TCFType! {
19 CFBoolean, CFBooleanRef
23}
24impl_TCFType!(CFBoolean, CFBooleanRef, CFBooleanGetTypeID);
25impl_CFTypeDescription!(CFBoolean);
26
27impl CFBoolean {
28 pub fn true_value() -> CFBoolean {
29 unsafe { TCFType::wrap_under_get_rule(kCFBooleanTrue) }
30 }
31
32 pub fn false_value() -> CFBoolean {
33 unsafe { TCFType::wrap_under_get_rule(kCFBooleanFalse) }
34 }
35}
36
37impl From<bool> for CFBoolean {
38 fn from(value: bool) -> CFBoolean {
39 if value {
40 CFBoolean::true_value()
41 } else {
42 CFBoolean::false_value()
43 }
44 }
45}
46
47impl From<CFBoolean> for bool {
48 fn from(value: CFBoolean) -> bool {
49 value.0 == unsafe { kCFBooleanTrue }
50 }
51}
52
53#[cfg(test)]
54mod tests {
55 use super::*;
56
57 #[test]
58 fn to_and_from_bool() {
59 let b_false = CFBoolean::from(false);
60 let b_true = CFBoolean::from(true);
61 assert_ne!(b_false, b_true);
62 assert_eq!(b_false, CFBoolean::false_value());
63 assert_eq!(b_true, CFBoolean::true_value());
64 assert!(!bool::from(b_false));
65 assert!(bool::from(b_true));
66 }
67}