@@ -221,40 +221,6 @@ impl<'a> Drop for Bech32Writer<'a> {
221221 }
222222}
223223
224- /// Allocationless Bech32 writer that doesn't write a checksum.
225- pub struct Bech32WithoutChecksumWriter < ' a > {
226- formatter : & ' a mut fmt:: Write ,
227- }
228-
229- impl < ' a > Bech32WithoutChecksumWriter < ' a > {
230- /// Creates a new writer that can write a bech32 string without allocating itself.
231- ///
232- /// This is a rather low-level API and doesn't check the HRP or data length for standard
233- /// compliance.
234- pub fn new (
235- hrp : & str ,
236- fmt : & ' a mut fmt:: Write ,
237- ) -> Result < Bech32WithoutChecksumWriter < ' a > , fmt:: Error > {
238- let writer = Self {
239- formatter : fmt,
240- } ;
241-
242- writer. formatter . write_str ( hrp) ?;
243- writer. formatter . write_char ( SEP ) ?;
244-
245- Ok ( writer)
246- }
247- }
248-
249- impl < ' a > WriteBase32 for Bech32WithoutChecksumWriter < ' a > {
250- type Err = fmt:: Error ;
251-
252- /// Writes a single 5 bit value of the data part
253- fn write_u5 ( & mut self , data : u5 ) -> fmt:: Result {
254- self . formatter . write_char ( data. to_char ( ) )
255- }
256- }
257-
258224/// Parse/convert base32 slice to `Self`. It is the reciprocal of
259225/// `ToBase32`.
260226pub trait FromBase32 : Sized {
@@ -471,15 +437,20 @@ pub fn encode_without_checksum_to_fmt<T: AsRef<[u5]>>(
471437 hrp : & str ,
472438 data : T ,
473439) -> Result < fmt:: Result , Error > {
474- let hrp_lower = match check_hrp ( hrp) ? {
440+ let hrp = match check_hrp ( hrp) ? {
475441 Case :: Upper => Cow :: Owned ( hrp. to_lowercase ( ) ) ,
476442 Case :: Lower | Case :: None => Cow :: Borrowed ( hrp) ,
477443 } ;
478444
479- match Bech32WithoutChecksumWriter :: new ( & hrp_lower, fmt) {
480- Ok ( mut writer) => Ok ( writer. write ( data. as_ref ( ) ) ) ,
481- Err ( e) => Ok ( Err ( e) ) ,
482- }
445+ let mut write = || {
446+ fmt. write_str ( & hrp) ?;
447+ fmt. write_char ( SEP ) ?;
448+ for b in data. as_ref ( ) {
449+ fmt. write_char ( b. to_char ( ) ) ?;
450+ }
451+ Ok ( ( ) )
452+ } ;
453+ Ok ( write ( ) )
483454}
484455
485456/// Used for encode/decode operations for the two variants of Bech32
@@ -1022,13 +993,13 @@ mod tests {
1022993
1023994 let mut written_str = String :: new ( ) ;
1024995 {
1025- let mut writer = Bech32WithoutChecksumWriter :: new ( hrp, & mut written_str) . unwrap ( ) ;
996+ let mut writer = Bech32Writer :: new ( hrp, Variant :: Bech32 , & mut written_str) . unwrap ( ) ;
1026997 writer. write ( & data) . unwrap ( ) ;
1027998 }
1028999
10291000 let encoded_str = encode_without_checksum ( hrp, data) . unwrap ( ) ;
10301001
1031- assert_eq ! ( encoded_str, written_str) ;
1002+ assert_eq ! ( encoded_str, written_str[ ..written_str . len ( ) - CHECKSUM_LENGTH ] ) ;
10321003 }
10331004
10341005 #[ test]
@@ -1047,22 +1018,6 @@ mod tests {
10471018 assert_eq ! ( encoded_str, written_str) ;
10481019 }
10491020
1050- #[ test]
1051- fn write_without_checksum_on_drop ( ) {
1052- let hrp = "lntb" ;
1053- let data = "Hello World!" . as_bytes ( ) . to_base32 ( ) ;
1054-
1055- let mut written_str = String :: new ( ) ;
1056- {
1057- let mut writer = Bech32WithoutChecksumWriter :: new ( hrp, & mut written_str) . unwrap ( ) ;
1058- writer. write ( & data) . unwrap ( ) ;
1059- }
1060-
1061- let encoded_str = encode_without_checksum ( hrp, data) . unwrap ( ) ;
1062-
1063- assert_eq ! ( encoded_str, written_str) ;
1064- }
1065-
10661021 #[ test]
10671022 fn test_hrp_case ( ) {
10681023 // Tests for issue with HRP case checking being ignored for encoding
0 commit comments