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}