@@ -9,7 +9,7 @@ use std::sync::Arc;
9
9
10
10
use bitcoin:: blockdata:: block;
11
11
use bitcoin:: consensus:: encode:: deserialize;
12
- use bitcoin:: hashes:: hex:: FromHex ;
12
+ use bitcoin:: hashes:: hex:: { FromHex , ToHex } ;
13
13
use bitcoin:: hashes:: { sha256, Hash } ;
14
14
use bitcoin:: { Script , Txid } ;
15
15
@@ -69,8 +69,8 @@ impl<'a> Request<'a> {
69
69
}
70
70
71
71
#[ doc( hidden) ]
72
- #[ derive( Debug , Clone , Copy , PartialEq , Eq , Hash , Deserialize ) ]
73
- pub struct Hex32Bytes ( #[ serde( deserialize_with = "from_hex" ) ] [ u8 ; 32 ] ) ;
72
+ #[ derive( Debug , Clone , Copy , PartialEq , Eq , Hash , Deserialize , Serialize ) ]
73
+ pub struct Hex32Bytes ( #[ serde( deserialize_with = "from_hex" , serialize_with = "to_hex" ) ] [ u8 ; 32 ] ) ;
74
74
75
75
impl Deref for Hex32Bytes {
76
76
type Target = [ u8 ; 32 ] ;
@@ -118,6 +118,13 @@ where
118
118
T :: from_hex ( & s) . map_err ( de:: Error :: custom)
119
119
}
120
120
121
+ fn to_hex < S > ( bytes : & [ u8 ] , serializer : S ) -> std:: result:: Result < S :: Ok , S :: Error >
122
+ where
123
+ S : serde:: ser:: Serializer ,
124
+ {
125
+ serializer. serialize_str ( & bytes. to_hex ( ) )
126
+ }
127
+
121
128
fn from_hex_array < ' de , T , D > ( deserializer : D ) -> Result < Vec < T > , D :: Error >
122
129
where
123
130
T : FromHex + std:: fmt:: Debug ,
@@ -388,3 +395,16 @@ impl From<std::sync::mpsc::RecvError> for Error {
388
395
Error :: Mpsc
389
396
}
390
397
}
398
+
399
+ #[ cfg( test) ]
400
+ mod tests {
401
+ use crate :: ScriptStatus ;
402
+
403
+ #[ test]
404
+ fn script_status_roundtrip ( ) {
405
+ let script_status: ScriptStatus = [ 1u8 ; 32 ] . into ( ) ;
406
+ let script_status_json = serde_json:: to_string ( & script_status) . unwrap ( ) ;
407
+ let script_status_back = serde_json:: from_str ( & script_status_json) . unwrap ( ) ;
408
+ assert_eq ! ( script_status, script_status_back) ;
409
+ }
410
+ }
0 commit comments