whisky_common/data/primitives/
boolean.rs1use crate::{data::{constr0, constr1, PlutusDataJson}, WError};
2use serde_json::{json, Value};
3
4#[derive(Clone, Debug, PartialEq)]
5pub enum Bool {
6 True,
7 False,
8}
9
10impl Bool {
11 pub fn new(b: bool) -> Self {
12 if b {
13 Bool::True
14 } else {
15 Bool::False
16 }
17 }
18}
19
20impl PlutusDataJson for Bool {
21 fn to_json(&self) -> serde_json::Value {
22 match self {
23 Bool::True => constr1(json!([])),
24 Bool::False => constr0(json!([])),
25 }
26 }
27
28 fn from_json(value: &Value) -> Result<Self, WError> {
29 let constructor = value
30 .get("constructor")
31 .ok_or_else(|| WError::new("Bool::from_json", "missing 'constructor' field"))?
32 .as_u64()
33 .ok_or_else(|| WError::new("Bool::from_json", "invalid 'constructor' value"))?;
34
35 match constructor {
36 0 => Ok(Bool::False),
37 1 => Ok(Bool::True),
38 _ => Err(WError::new(
39 "Bool::from_json",
40 &format!("invalid constructor tag for Bool: {}", constructor),
41 )),
42 }
43 }
44}
45
46pub fn bool(b: bool) -> Value {
47 if b {
48 constr1(json!([]))
49 } else {
50 constr0(json!([]))
51 }
52}