File tree Expand file tree Collapse file tree 2 files changed +39
-0
lines changed Expand file tree Collapse file tree 2 files changed +39
-0
lines changed Original file line number Diff line number Diff line change @@ -55,6 +55,19 @@ clvm_primitive!(i128);
55
55
clvm_primitive ! ( usize ) ;
56
56
clvm_primitive ! ( isize ) ;
57
57
58
+ impl < N > FromClvm < N > for bool {
59
+ fn from_clvm ( decoder : & impl ClvmDecoder < Node = N > , node : N ) -> Result < Self , FromClvmError > {
60
+ let atom = decoder. decode_atom ( & node) ?;
61
+ match atom. as_ref ( ) {
62
+ [ ] => Ok ( false ) ,
63
+ [ 1 ] => Ok ( true ) ,
64
+ _ => Err ( FromClvmError :: Custom (
65
+ "expected boolean value of either `()` or `1`" . to_string ( ) ,
66
+ ) ) ,
67
+ }
68
+ }
69
+ }
70
+
58
71
impl < N , A , B > FromClvm < N > for ( A , B )
59
72
where
60
73
A : FromClvm < N > ,
@@ -211,6 +224,19 @@ mod tests {
211
224
assert_eq ! ( decode( a, "8180" ) , Ok ( -128i8 ) ) ;
212
225
}
213
226
227
+ #[ test]
228
+ fn test_bool ( ) {
229
+ let a = & mut Allocator :: new ( ) ;
230
+ assert_eq ! ( decode( a, "80" ) , Ok ( false ) ) ;
231
+ assert_eq ! ( decode( a, "01" ) , Ok ( true ) ) ;
232
+ assert_eq ! (
233
+ decode:: <bool >( a, "05" ) ,
234
+ Err ( FromClvmError :: Custom (
235
+ "expected boolean value of either `()` or `1`" . to_string( ) ,
236
+ ) )
237
+ )
238
+ }
239
+
214
240
#[ test]
215
241
fn test_pair ( ) {
216
242
let a = & mut Allocator :: new ( ) ;
Original file line number Diff line number Diff line change @@ -40,6 +40,12 @@ clvm_primitive!(i128);
40
40
clvm_primitive ! ( usize ) ;
41
41
clvm_primitive ! ( isize ) ;
42
42
43
+ impl < N > ToClvm < N > for bool {
44
+ fn to_clvm ( & self , encoder : & mut impl ClvmEncoder < Node = N > ) -> Result < N , ToClvmError > {
45
+ ( if * self { 1 } else { 0 } ) . to_clvm ( encoder)
46
+ }
47
+ }
48
+
43
49
impl < N , T > ToClvm < N > for & T
44
50
where
45
51
T : ToClvm < N > ,
@@ -173,6 +179,13 @@ mod tests {
173
179
assert_eq ! ( encode( a, -128i8 ) , Ok ( "8180" . to_owned( ) ) ) ;
174
180
}
175
181
182
+ #[ test]
183
+ fn test_bool ( ) {
184
+ let a = & mut Allocator :: new ( ) ;
185
+ assert_eq ! ( encode( a, true ) , Ok ( "01" . to_owned( ) ) ) ;
186
+ assert_eq ! ( encode( a, false ) , Ok ( "80" . to_owned( ) ) ) ;
187
+ }
188
+
176
189
#[ test]
177
190
fn test_reference ( ) {
178
191
let a = & mut Allocator :: new ( ) ;
You can’t perform that action at this time.
0 commit comments