ruru/class/
boolean.rs

1use std::convert::From;
2
3use types::Value;
4use util;
5
6use {Object, VerifiedObject};
7
8/// `TrueClass` and `FalseClass`
9#[derive(Debug, PartialEq)]
10pub struct Boolean {
11    value: Value,
12}
13
14impl Boolean {
15    /// Creates a new instance boolean value from `bool`.
16    ///
17    /// # Examples
18    ///
19    /// ```
20    /// use ruru::{Boolean, VM};
21    /// # VM::init();
22    ///
23    /// assert_eq!(Boolean::new(true).to_bool(), true);
24    /// ```
25    ///
26    /// Ruby:
27    ///
28    /// ```ruby
29    /// true == true
30    /// ```
31    pub fn new(state: bool) -> Self {
32        Self::from(util::bool_to_value(state))
33    }
34
35    /// Retrieves a `bool` value from `Boolean`.
36    ///
37    /// # Examples
38    ///
39    /// ```
40    /// use ruru::{Boolean, VM};
41    /// # VM::init();
42    ///
43    /// assert_eq!(Boolean::new(true).to_bool(), true);
44    /// ```
45    ///
46    /// Ruby:
47    ///
48    /// ```ruby
49    /// true == true
50    /// ```
51    pub fn to_bool(&self) -> bool {
52        self.value().is_true()
53    }
54}
55
56impl From<Value> for Boolean {
57    fn from(value: Value) -> Self {
58        Boolean { value: value }
59    }
60}
61
62impl Object for Boolean {
63    #[inline]
64    fn value(&self) -> Value {
65        self.value
66    }
67}
68
69impl VerifiedObject for Boolean {
70    fn is_correct_type<T: Object>(object: &T) -> bool {
71        let value = object.value();
72
73        value.is_true() || value.is_false()
74    }
75
76    fn error_message() -> &'static str {
77        "Error converting to Boolean"
78    }
79}