1#[derive(Debug, Clone, PartialEq)]
5pub enum Value {
6 Null,
8 String(String),
10 Bulk(Vec<u8>),
12 Integer(i64),
14 Boolean(bool),
16 Double(f64),
18 Array(Vec<Value>),
20 Map(Vec<(Value, Value)>),
22 Error(String),
24}
25
26impl Value {
27 pub fn as_str(&self) -> Option<&str> {
29 match self {
30 Value::String(s) => Some(s),
31 Value::Bulk(b) => std::str::from_utf8(b).ok(),
32 _ => None,
33 }
34 }
35
36 pub fn as_bytes(&self) -> Option<&[u8]> {
38 match self {
39 Value::Bulk(b) => Some(b),
40 Value::String(s) => Some(s.as_bytes()),
41 _ => None,
42 }
43 }
44
45 pub fn as_int(&self) -> Option<i64> {
47 match self {
48 Value::Integer(i) => Some(*i),
49 _ => None,
50 }
51 }
52
53 pub fn as_bool(&self) -> Option<bool> {
55 match self {
56 Value::Boolean(b) => Some(*b),
57 Value::Integer(i) => Some(*i != 0),
58 _ => None,
59 }
60 }
61
62 pub fn is_null(&self) -> bool {
64 matches!(self, Value::Null)
65 }
66
67 pub fn is_error(&self) -> bool {
69 matches!(self, Value::Error(_))
70 }
71}