28 name: String, |
28 name: String, |
29 fields: HashMap<String, HaskellValue>, |
29 fields: HashMap<String, HaskellValue>, |
30 }, |
30 }, |
31 } |
31 } |
32 |
32 |
|
33 impl HaskellValue { |
|
34 pub fn to_number(&self) -> Option<u8> { |
|
35 match self { |
|
36 HaskellValue::Number(value) => Some(*value), |
|
37 _ => None, |
|
38 } |
|
39 } |
|
40 |
|
41 pub fn into_number(self) -> Option<u8> { |
|
42 match self { |
|
43 HaskellValue::Number(value) => Some(value), |
|
44 _ => None, |
|
45 } |
|
46 } |
|
47 |
|
48 pub fn to_string(&self) -> Option<&str> { |
|
49 match self { |
|
50 HaskellValue::String(value) => Some(value), |
|
51 _ => None, |
|
52 } |
|
53 } |
|
54 |
|
55 pub fn into_string(self) -> Option<String> { |
|
56 match self { |
|
57 HaskellValue::String(value) => Some(value), |
|
58 _ => None, |
|
59 } |
|
60 } |
|
61 |
|
62 pub fn into_list(self) -> Option<Vec<HaskellValue>> { |
|
63 match self { |
|
64 HaskellValue::List(items) => Some(items), |
|
65 _ => None, |
|
66 } |
|
67 } |
|
68 |
|
69 pub fn into_tuple(self) -> Option<Vec<HaskellValue>> { |
|
70 match self { |
|
71 HaskellValue::Tuple(items) => Some(items), |
|
72 _ => None, |
|
73 } |
|
74 } |
|
75 |
|
76 pub fn into_anon_struct(self) -> Option<(String, Vec<HaskellValue>)> { |
|
77 match self { |
|
78 HaskellValue::AnonStruct { name, fields } => Some((name, fields)), |
|
79 _ => None, |
|
80 } |
|
81 } |
|
82 |
|
83 pub fn into_struct(self) -> Option<(String, HashMap<String, HaskellValue>)> { |
|
84 match self { |
|
85 HaskellValue::Struct { name, fields } => Some((name, fields)), |
|
86 _ => None, |
|
87 } |
|
88 } |
|
89 } |
|
90 |
33 fn write_sequence( |
91 fn write_sequence( |
34 f: &mut Formatter<'_>, |
92 f: &mut Formatter<'_>, |
35 brackets: &[u8; 2], |
93 brackets: &[u8; 2], |
36 mut items: std::slice::Iter<HaskellValue>, |
94 mut items: std::slice::Iter<HaskellValue>, |
37 ) -> Result<(), Error> { |
95 ) -> Result<(), Error> { |
38 write!(f, "{}", brackets[0] as char)?; |
96 write!(f, "{}", brackets[0] as char)?; |
39 while let Some(value) = items.next() { |
97 while let Some(value) = items.next() { |
40 write!(f, "{}", value); |
98 write!(f, "{}", value)?; |
41 if !items.as_slice().is_empty() { |
99 if !items.as_slice().is_empty() { |
42 write!(f, ", ")?; |
100 write!(f, ", ")?; |
43 } |
101 } |
44 } |
102 } |
45 if brackets[1] != b'\0' { |
103 if brackets[1] != b'\0' { |