@@ -126,25 +126,22 @@ impl<'a> RustlerDecoder<'a> for Binary<'a> {
126126impl RustlerEncoder for Vec < u8 > {
127127 fn rustler_encode < ' a > ( & self , env : Env < ' a > ) -> Result < Term < ' a > , Error > {
128128 let mut erl_bin = OwnedBinary :: new ( self . len ( ) )
129- . ok_or ( "could not create OwnedBinary" )
130- . expect ( "could not allocate binary" ) ;
129+ . ok_or_else ( || Error :: RaiseTerm ( Box :: new ( "could not create OwnedBinary" ) ) ) ?;
131130 let _ = erl_bin. as_mut_slice ( ) . write_all ( & self . as_slice ( ) ) ;
132131 Ok ( erl_bin. release ( env) . to_term ( env) )
133132 }
134133}
135134
136135impl < ' a > RustlerDecoder < ' a > for Vec < u8 > {
137136 fn rustler_decode ( term : Term < ' a > ) -> NifResult < Self > {
138- let binary: Binary = term. decode ( ) . expect ( "failed to decode binary" ) ;
139- Ok ( binary. as_slice ( ) . to_vec ( ) )
137+ term. decode :: < Binary > ( ) . map ( |t| t. to_vec ( ) )
140138 }
141139}
142140
143141impl RustlerEncoder for Vec < u32 > {
144142 fn rustler_encode < ' a > ( & self , env : Env < ' a > ) -> Result < Term < ' a > , Error > {
145143 let mut erl_bin: OwnedBinary = OwnedBinary :: new ( self . len ( ) * 4 )
146- . ok_or ( "could not create OwnedBinary" )
147- . expect ( "could not allocate binary" ) ;
144+ . ok_or_else ( || Error :: RaiseTerm ( Box :: new ( "could not create OwnedBinary" ) ) ) ?;
148145 let bytes: & [ u8 ] = words_to_bytes ( self . as_slice ( ) ) ;
149146 let _ = erl_bin. as_mut_slice ( ) . write_all ( bytes) ;
150147 Ok ( erl_bin. release ( env) . to_term ( env) )
@@ -153,10 +150,8 @@ impl RustlerEncoder for Vec<u32> {
153150
154151impl < ' a > RustlerDecoder < ' a > for Vec < u32 > {
155152 fn rustler_decode ( term : Term < ' a > ) -> NifResult < Self > {
156- let binary: Binary = term. decode ( ) . expect ( "failed to decode binary" ) ;
157- let bytes: & [ u8 ] = binary. as_slice ( ) ;
158- let words: Vec < u32 > = bytes_to_words ( bytes) ;
159- Ok ( words)
153+ term. decode :: < Binary > ( )
154+ . map ( |b| bytes_to_words ( b. as_slice ( ) ) )
160155 }
161156}
162157
@@ -175,9 +170,7 @@ impl<'a> RustlerDecoder<'a> for Digest {
175170
176171impl RustlerEncoder for AffinePoint {
177172 fn rustler_encode < ' a > ( & self , env : Env < ' a > ) -> Result < Term < ' a > , Error > {
178- bincode:: serialize ( self )
179- . expect ( "failed to encode AffinePoint" )
180- . rustler_encode ( env)
173+ bincode_serialize ( self ) ?. rustler_encode ( env)
181174 }
182175}
183176
@@ -190,9 +183,7 @@ impl<'a> RustlerDecoder<'a> for AffinePoint {
190183
191184impl RustlerEncoder for Signature {
192185 fn rustler_encode < ' a > ( & self , env : Env < ' a > ) -> Result < Term < ' a > , Error > {
193- bincode:: serialize ( self )
194- . expect ( "failed to encode Signature" )
195- . rustler_encode ( env)
186+ bincode_serialize ( self ) ?. rustler_encode ( env)
196187 }
197188}
198189
@@ -213,7 +204,7 @@ impl RustlerEncoder for RecoveryId {
213204impl < ' a > RustlerDecoder < ' a > for RecoveryId {
214205 fn rustler_decode ( term : Term < ' a > ) -> NifResult < Self > {
215206 let byte: u8 = term. decode ( ) ?;
216- Ok ( RecoveryId :: from_byte ( byte) . expect ( "invalid RecoveryId") )
207+ RecoveryId :: from_byte ( byte) . ok_or_else ( || Error :: Term ( Box :: new ( " RecoveryId") ) )
217208 }
218209}
219210
@@ -228,7 +219,7 @@ impl RustlerEncoder for SigningKey {
228219impl < ' a > RustlerDecoder < ' a > for SigningKey {
229220 fn rustler_decode ( term : Term < ' a > ) -> NifResult < Self > {
230221 let bytez: Vec < u8 > = RustlerDecoder :: rustler_decode ( term) ?;
231- Ok ( SigningKey :: from_slice ( & bytez) . expect ( "invalid SigningKey" ) )
222+ SigningKey :: from_slice ( & bytez) . map_err ( |_| Error :: Term ( Box :: new ( "invalid SigningKey" ) ) )
232223 }
233224}
234225
@@ -261,8 +252,8 @@ impl<'a> RustlerDecoder<'a> for ComplianceUnit {
261252
262253impl Encoder for ComplianceUnit {
263254 fn encode < ' a > ( & self , env : Env < ' a > ) -> Term < ' a > {
264- let encoded = self . rustler_encode ( env) ;
265- encoded . expect ( "failed to encode ComplianceUnit" )
255+ self . rustler_encode ( env)
256+ . unwrap_or_else ( |_e| env . error_tuple ( "failed to encode ComplianceUnit" ) )
266257 }
267258}
268259
@@ -304,8 +295,8 @@ impl<'a> RustlerDecoder<'a> for ExpirableBlob {
304295
305296impl Encoder for ExpirableBlob {
306297 fn encode < ' a > ( & self , env : Env < ' a > ) -> Term < ' a > {
307- let encoded = self . rustler_encode ( env) ;
308- encoded . expect ( "failed to encode ExpirableBlob" )
298+ self . rustler_encode ( env)
299+ . unwrap_or_else ( |_e| env . error_tuple ( "failed to encode ExpirableBlob" ) )
309300 }
310301}
311302
@@ -365,8 +356,8 @@ impl<'a> RustlerDecoder<'a> for AppData {
365356
366357impl Encoder for AppData {
367358 fn encode < ' a > ( & self , env : Env < ' a > ) -> Term < ' a > {
368- let encoded = self . rustler_encode ( env) ;
369- encoded . expect ( "failed to encode AppData" )
359+ self . rustler_encode ( env)
360+ . unwrap_or_else ( |_e| env . error_tuple ( "failed to encode AppData" ) )
370361 }
371362}
372363
@@ -459,8 +450,8 @@ impl<'a> RustlerDecoder<'a> for LogicInstance {
459450
460451impl Encoder for LogicVerifierInputs {
461452 fn encode < ' a > ( & self , env : Env < ' a > ) -> Term < ' a > {
462- let encoded = self . rustler_encode ( env) ;
463- encoded . expect ( "failed to encode LogicVerifierInputs" )
453+ self . rustler_encode ( env)
454+ . unwrap_or_else ( |_| env . error_tuple ( "failed to encode LogicVerifierInputs" ) )
464455 }
465456}
466457
@@ -508,8 +499,8 @@ impl<'a> RustlerDecoder<'a> for Action {
508499
509500impl Encoder for Action {
510501 fn encode < ' a > ( & self , env : Env < ' a > ) -> Term < ' a > {
511- let encoded = self . rustler_encode ( env) ;
512- encoded . expect ( "failed to encode Action" )
502+ self . rustler_encode ( env)
503+ . unwrap_or_else ( |_e| env . error_tuple ( "failed to encode Action" ) )
513504 }
514505}
515506
@@ -529,11 +520,8 @@ impl RustlerEncoder for MerkleTree {
529520 let encoded_vec: Term = self
530521 . leaves
531522 . iter ( )
532- . map ( |leaf| {
533- leaf. rustler_encode ( env)
534- . expect ( "could not encode MerkleTree leaf" )
535- } )
536- . collect :: < Vec < Term > > ( )
523+ . map ( |leaf| leaf. rustler_encode ( env) )
524+ . collect :: < NifResult < Vec < Term > > > ( ) ?
537525 . encode ( env) ;
538526
539527 let map = map_new ( env)
@@ -547,22 +535,21 @@ impl RustlerEncoder for MerkleTree {
547535impl < ' a > RustlerDecoder < ' a > for MerkleTree {
548536 fn rustler_decode ( term : Term < ' a > ) -> NifResult < Self > {
549537 let leaves_term = term. map_get ( at_leaves ( ) . encode ( term. get_env ( ) ) ) ?;
550- let leaves_terms =
551- Vec :: < Term > :: decode ( leaves_term) . expect ( "failed to decode MerkleTree leaves" ) ;
538+ let leaves_terms = Vec :: < Term > :: decode ( leaves_term) ?;
552539
553540 let leaves: Vec < Digest > = leaves_terms
554541 . iter ( )
555- . map ( |term| RustlerDecoder :: rustler_decode ( * term) . expect ( "failed to decode leaf" ) )
556- . collect ( ) ;
542+ . map ( |term| RustlerDecoder :: rustler_decode ( * term) )
543+ . collect :: < NifResult < Vec < _ > > > ( ) ? ;
557544
558545 Ok ( MerkleTree { leaves } )
559546 }
560547}
561548
562549impl Encoder for MerkleTree {
563550 fn encode < ' a > ( & self , env : Env < ' a > ) -> Term < ' a > {
564- let encoded = self . rustler_encode ( env) ;
565- encoded . expect ( "failed to encode MerkleTree" )
551+ self . rustler_encode ( env)
552+ . unwrap_or_else ( |_e| env . error_tuple ( "failed to encode MerkleTree" ) )
566553 }
567554}
568555
@@ -581,44 +568,33 @@ impl RustlerEncoder for MerklePath {
581568 . 0
582569 . iter ( )
583570 . map ( |( hash, is_right) | {
584- let hash_term = hash
585- . rustler_encode ( env)
586- . expect ( "could not encode MerklePath hash" ) ;
587- let is_right_term = is_right. encode ( env) ;
588- ( hash_term, is_right_term) . encode ( env)
571+ Ok ( ( hash. rustler_encode ( env) ?, is_right. encode ( env) ) . encode ( env) )
589572 } )
590- . collect ( ) ;
573+ . collect :: < NifResult < Vec < Term > > > ( ) ? ;
591574
592575 Ok ( encoded_vec. encode ( env) )
593576 }
594577}
595578
596579impl < ' a > RustlerDecoder < ' a > for MerklePath {
597580 fn rustler_decode ( term : Term < ' a > ) -> NifResult < Self > {
598- let path_terms = Vec :: < Term > :: decode ( term) . expect ( "failed to decode MerklePath list" ) ;
599-
600- let path: Vec < ( Digest , bool ) > = path_terms
581+ Vec :: < Term > :: decode ( term) ?
601582 . iter ( )
602583 . map ( |term| {
603- let tuple: ( Term , Term ) = term. decode ( ) . expect ( "failed to decode MerklePath tuple" ) ;
604- let hash: Digest = RustlerDecoder :: rustler_decode ( tuple. 0 )
605- . expect ( "failed to decode MerklePath hash" ) ;
606- let is_right: bool = tuple
607- . 1
608- . decode ( )
609- . expect ( "failed to decode MerklePath boolean" ) ;
610- ( hash, is_right)
584+ let tuple: ( Term , Term ) = term. decode ( ) ?;
585+ let hash: Digest = RustlerDecoder :: rustler_decode ( tuple. 0 ) ?;
586+ let is_right: bool = tuple. 1 . decode ( ) ?;
587+ Ok ( ( hash, is_right) )
611588 } )
612- . collect ( ) ;
613-
614- Ok ( MerklePath ( path) )
589+ . collect :: < NifResult < Vec < ( Digest , bool ) > > > ( )
590+ . map ( MerklePath )
615591 }
616592}
617593
618594impl Encoder for MerklePath {
619595 fn encode < ' a > ( & self , env : Env < ' a > ) -> Term < ' a > {
620- let encoded = self . rustler_encode ( env) ;
621- encoded . expect ( "failed to encode MerklePath" )
596+ self . rustler_encode ( env)
597+ . unwrap_or_else ( |_e| env . error_tuple ( "failed to encode MerklePath" ) )
622598 }
623599}
624600
@@ -711,8 +687,8 @@ impl<'a> RustlerDecoder<'a> for ComplianceInstance {
711687
712688impl Encoder for ComplianceInstance {
713689 fn encode < ' a > ( & self , env : Env < ' a > ) -> Term < ' a > {
714- let encoded = self . rustler_encode ( env) ;
715- encoded . expect ( "failed to encode ComplianceInstance" )
690+ self . rustler_encode ( env)
691+ . unwrap_or_else ( |_| env . error_tuple ( "failed to encode compliance instance" ) )
716692 }
717693}
718694
@@ -785,8 +761,8 @@ impl<'a> RustlerDecoder<'a> for ComplianceWitness {
785761
786762impl Encoder for ComplianceWitness {
787763 fn encode < ' a > ( & self , env : Env < ' a > ) -> Term < ' a > {
788- let encoded = self . rustler_encode ( env) ;
789- encoded . expect ( "failed to encode ComplianceWitness" )
764+ self . rustler_encode ( env)
765+ . unwrap_or_else ( |_| env . error_tuple ( "failed to encode compliance witness" ) )
790766 }
791767}
792768
@@ -816,8 +792,8 @@ impl<'a> RustlerDecoder<'a> for NullifierKeyCommitment {
816792
817793impl Encoder for NullifierKeyCommitment {
818794 fn encode < ' a > ( & self , env : Env < ' a > ) -> Term < ' a > {
819- let encoded = self . rustler_encode ( env) ;
820- encoded . expect ( "failed to encode NullifierKeyCommitment" )
795+ self . rustler_encode ( env)
796+ . unwrap_or_else ( |_| env . error_tuple ( "failed to encode nullifier" ) )
821797 }
822798}
823799
@@ -846,8 +822,8 @@ impl<'a> RustlerDecoder<'a> for NullifierKey {
846822
847823impl Encoder for NullifierKey {
848824 fn encode < ' a > ( & self , env : Env < ' a > ) -> Term < ' a > {
849- let encoded = self . rustler_encode ( env) ;
850- encoded . expect ( "failed to encode NullifierKey" )
825+ self . rustler_encode ( env)
826+ . unwrap_or_else ( |_| env . error_tuple ( "failed to encode NullifierKey" ) )
851827 }
852828}
853829
@@ -939,8 +915,8 @@ impl<'a> RustlerDecoder<'a> for Resource {
939915
940916impl Encoder for Resource {
941917 fn encode < ' a > ( & self , env : Env < ' a > ) -> Term < ' a > {
942- let encoded = self . rustler_encode ( env) ;
943- encoded . expect ( "failed to encode Resource" )
918+ self . rustler_encode ( env)
919+ . unwrap_or_else ( |_| env . error_tuple ( "failed to encode Resource" ) )
944920 }
945921}
946922
@@ -981,8 +957,8 @@ impl<'a> RustlerDecoder<'a> for DeltaProof {
981957
982958impl Encoder for DeltaProof {
983959 fn encode < ' a > ( & self , env : Env < ' a > ) -> Term < ' a > {
984- let encoded = self . rustler_encode ( env) ;
985- encoded . expect ( "failed to encode DeltaProof" )
960+ self . rustler_encode ( env)
961+ . unwrap_or_else ( |_| env . error_tuple ( "failed to encode DeltaProof" ) )
986962 }
987963}
988964
@@ -1019,8 +995,8 @@ impl<'a> RustlerDecoder<'a> for DeltaWitness {
1019995
1020996impl Encoder for DeltaWitness {
1021997 fn encode < ' a > ( & self , env : Env < ' a > ) -> Term < ' a > {
1022- let encoded = self . rustler_encode ( env) ;
1023- encoded . expect ( "failed to encode DeltaWitness" )
998+ self . rustler_encode ( env)
999+ . unwrap_or_else ( |_| env . error_tuple ( "failed to encode DeltaWitness" ) )
10241000 }
10251001}
10261002
@@ -1073,7 +1049,7 @@ impl<'a> RustlerDecoder<'a> for LogicVerifier {
10731049impl Encoder for LogicVerifier {
10741050 fn encode < ' a > ( & self , env : Env < ' a > ) -> Term < ' a > {
10751051 let encoded = self . rustler_encode ( env) ;
1076- encoded. expect ( "failed to encode LogicVerifier" )
1052+ encoded. unwrap_or_else ( |_e| env . error_tuple ( "failed to encode LogicVerifier" ) )
10771053 }
10781054}
10791055
@@ -1131,8 +1107,8 @@ impl<'a> RustlerDecoder<'a> for Transaction {
11311107
11321108impl Encoder for Transaction {
11331109 fn encode < ' a > ( & self , env : Env < ' a > ) -> Term < ' a > {
1134- let encoded = self . rustler_encode ( env) ;
1135- encoded . expect ( "failed to encode Transaction" )
1110+ self . rustler_encode ( env)
1111+ . unwrap_or_else ( |_| env . error_tuple ( "failed to encode Transaction" ) )
11361112 }
11371113}
11381114
0 commit comments