1+ //! SigmaBoolean JSON encoding
2+
13use core:: convert:: TryFrom ;
24use core:: convert:: TryInto ;
35
4- use alloc:: vec:: Vec ;
5- use bounded_vec:: BoundedVecOutOfBounds ;
6- use ergo_chain_types:: EcPoint ;
7- use serde:: Deserialize ;
8- use serde:: Serialize ;
9-
6+ use super :: serialize_bytes;
7+ use crate :: serialization:: SigmaSerializable ;
108use crate :: sigma_protocol:: sigma_boolean:: cand:: Cand ;
119use crate :: sigma_protocol:: sigma_boolean:: cor:: Cor ;
1210use crate :: sigma_protocol:: sigma_boolean:: cthreshold:: Cthreshold ;
@@ -15,11 +13,16 @@ use crate::sigma_protocol::sigma_boolean::ProveDlog;
1513use crate :: sigma_protocol:: sigma_boolean:: SigmaBoolean ;
1614use crate :: sigma_protocol:: sigma_boolean:: SigmaConjecture ;
1715use crate :: sigma_protocol:: sigma_boolean:: SigmaProofOfKnowledgeTree ;
16+ use alloc:: vec:: Vec ;
17+ use bounded_vec:: BoundedVecOutOfBounds ;
18+ use ergo_chain_types:: EcPoint ;
19+ use serde:: Serialize ;
20+ use serde:: { Deserialize , Deserializer , Serializer } ;
1821
1922#[ derive( Serialize , Deserialize , PartialEq , Debug , Clone ) ]
2023#[ serde( tag = "op" ) ]
2124#[ allow( clippy:: large_enum_variant) ]
22- pub enum SigmaBooleanJson {
25+ pub ( crate ) enum SigmaBooleanJson {
2326 #[ serde( rename = "205" ) ] // OpCode::PROVE_DLOG
2427 ProveDlog { h : EcPoint } ,
2528 #[ serde( rename = "206" ) ] // OpCode::PROVE_DIFFIE_HELLMAN_TUPLE
@@ -132,3 +135,29 @@ impl TryFrom<SigmaBooleanJson> for SigmaBoolean {
132135 } )
133136 }
134137}
138+
139+ /// Serializer (used in Wasm bindings)
140+ pub fn serialize < S > ( sb : & SigmaBoolean , serializer : S ) -> Result < S :: Ok , S :: Error >
141+ where
142+ S : Serializer ,
143+ {
144+ use serde:: ser:: Error ;
145+
146+ let bytes = sb
147+ . sigma_serialize_bytes ( )
148+ . map_err ( |err| Error :: custom ( err. to_string ( ) ) ) ?;
149+ serialize_bytes ( & bytes[ ..] , serializer)
150+ }
151+
152+ /// Deserializer (used in Wasm bindings)
153+ pub fn deserialize < ' de , D > ( deserializer : D ) -> Result < SigmaBoolean , D :: Error >
154+ where
155+ D : Deserializer < ' de > ,
156+ {
157+ use serde:: de:: Error ;
158+ String :: deserialize ( deserializer)
159+ . and_then ( |str| base16:: decode ( & str) . map_err ( |err| Error :: custom ( err. to_string ( ) ) ) )
160+ . and_then ( |bytes| {
161+ SigmaBoolean :: sigma_parse_bytes ( & bytes) . map_err ( |err| Error :: custom ( err. to_string ( ) ) )
162+ } )
163+ }
0 commit comments