From bc406bfdd6c579794387494094e19e0361c59ad4 Mon Sep 17 00:00:00 2001 From: Martin Habovstiak Date: Fri, 9 Apr 2021 17:58:35 +0200 Subject: [PATCH] Use &mut dyn fmt::Write instead of bool This replaces manually-written dynamic dispatch with `&mut dyn fmt::Write` which is hopefully more readable. --- src/util/address.rs | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/util/address.rs b/src/util/address.rs index 896a4fb3..dd664d6a 100644 --- a/src/util/address.rs +++ b/src/util/address.rs @@ -393,9 +393,14 @@ impl fmt::Display for Address { Network::Testnet | Network::Signet => "tb", Network::Regtest => "bcrt", }; - let is_alternate = fmt.alternate(); - let mut opt_up_writer = OptionallyUpperWriter(fmt, is_alternate); - let mut bech32_writer = bech32::Bech32Writer::new(hrp, &mut opt_up_writer)?; + let mut upper_writer; + let writer = if fmt.alternate() { + upper_writer = UpperWriter(fmt); + &mut upper_writer as &mut dyn fmt::Write + } else { + fmt as &mut dyn fmt::Write + }; + let mut bech32_writer = bech32::Bech32Writer::new(hrp, writer)?; bech32::WriteBase32::write_u5(&mut bech32_writer, ver)?; bech32::ToBase32::write_base32(&prog, &mut bech32_writer) } @@ -403,16 +408,12 @@ impl fmt::Display for Address { } } -struct OptionallyUpperWriter(W, bool); +struct UpperWriter(W); -impl fmt::Write for OptionallyUpperWriter { +impl fmt::Write for UpperWriter { fn write_str(&mut self, s: &str) -> fmt::Result { - if self.1 { - for c in s.chars() { - self.0.write_char(c.to_ascii_uppercase())?; - } - } else { - self.0.write_str(s)?; + for c in s.chars() { + self.0.write_char(c.to_ascii_uppercase())?; } Ok(()) }