stepflow_data/value/
true_value.rs

1use crate::InvalidValue;
2
3use super::{Value, BaseValue};
4
5#[derive(Debug, PartialEq, Clone)]
6#[cfg_attr(feature = "serde-support", derive(serde::Serialize))]
7pub struct TrueValue;
8
9impl TrueValue {
10  pub fn new() -> Self { Self {} }
11  pub fn val(&self) -> bool { true }
12  pub fn boxed(self) -> Box<dyn Value> { Box::new(self) }
13}
14
15impl Value for TrueValue {
16  fn get_baseval(&self) -> BaseValue {
17    BaseValue::Boolean(true)
18  }
19
20  fn clone_box(&self) -> Box<dyn Value> {
21    Box::new(self.clone())
22  }
23
24  fn eq_box(&self, other: &Box<dyn Value>) -> bool {
25    // no value -- just an existence check so if the other is the same type, they're equal
26    other.is::<Self>()
27  }
28}
29
30impl std::str::FromStr for TrueValue {
31  type Err = InvalidValue;
32
33  fn from_str(s: &str) -> Result<Self, Self::Err> {
34    if s.to_lowercase() == "true" {
35      Ok(TrueValue::new())
36    } else  {
37      Err(InvalidValue::WrongValue)
38    }
39  }
40}
41
42
43#[cfg(test)]
44mod tests {
45  use crate::{BaseValue, InvalidValue, value::StringValue};
46  use super::{TrueValue, Value};
47
48  #[test]
49  fn is_true() {
50    let true_val = TrueValue::new();
51    assert_eq!(true_val.val(), true);
52    assert!(matches!(true_val.get_baseval(), BaseValue::Boolean(f) if f == true));
53  }
54
55  #[test]
56  fn partial_eq() {
57    let true_val1 = TrueValue::new();
58    let true_val2 = TrueValue::new();
59    assert_eq!(true_val1, true_val2);
60
61    let b1: Box<dyn Value> = Box::new(true_val1);
62    let b2: Box<dyn Value> = Box::new(true_val2);
63    assert!(b1 == b2);
64
65    let string_val = StringValue::try_new("true").unwrap();
66    let s: Box<dyn Value> = Box::new(string_val);
67    assert!(b1 != s);
68  }
69
70  #[test]
71  fn from_str() {
72    assert_eq!("true".parse::<TrueValue>(), Ok(TrueValue::new()));
73    assert_eq!("tRuE".parse::<TrueValue>(), Ok(TrueValue::new()));
74    assert_eq!("tRuEe".parse::<TrueValue>(), Err(InvalidValue::WrongValue));
75  }
76}