]> git.proxmox.com Git - rustc.git/blame - vendor/core-foundation/src/boolean.rs
New upstream version 1.76.0+dfsg1
[rustc.git] / vendor / core-foundation / src / boolean.rs
CommitLineData
add651ee
FG
1// Copyright 2013 The Servo Project Developers. See the COPYRIGHT
2// file at the top-level directory of this distribution.
3//
4// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
5// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
6// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
7// option. This file may not be copied, modified, or distributed
8// except according to those terms.
9
10//! A Boolean type.
11
4b012472
FG
12pub use core_foundation_sys::number::{
13 kCFBooleanFalse, kCFBooleanTrue, CFBooleanGetTypeID, CFBooleanRef,
14};
add651ee 15
4b012472 16use crate::base::TCFType;
add651ee 17
4b012472 18declare_TCFType! {
add651ee
FG
19 /// A Boolean type.
20 ///
21 /// FIXME(pcwalton): Should be a newtype struct, but that fails due to a Rust compiler bug.
22 CFBoolean, CFBooleanRef
23}
24impl_TCFType!(CFBoolean, CFBooleanRef, CFBooleanGetTypeID);
25impl_CFTypeDescription!(CFBoolean);
26
27impl CFBoolean {
28 pub fn true_value() -> CFBoolean {
4b012472 29 unsafe { TCFType::wrap_under_get_rule(kCFBooleanTrue) }
add651ee
FG
30 }
31
32 pub fn false_value() -> CFBoolean {
4b012472 33 unsafe { TCFType::wrap_under_get_rule(kCFBooleanFalse) }
add651ee
FG
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}