diff --git a/components/zcash_address/src/encoding.rs b/components/zcash_address/src/encoding.rs index 326ab5069..21fe25df7 100644 --- a/components/zcash_address/src/encoding.rs +++ b/components/zcash_address/src/encoding.rs @@ -2,7 +2,7 @@ use std::{convert::TryInto, error::Error, fmt, str::FromStr}; use bech32::{self, FromBase32, ToBase32, Variant}; -use crate::kind::unified::Unified; +use crate::kind::unified::{private::SealedContainer, Unified}; use crate::{kind::*, AddressKind, Network, ZcashAddress}; /// An error while attempting to parse a string as a Zcash address. diff --git a/components/zcash_address/src/kind/unified.rs b/components/zcash_address/src/kind/unified.rs index 1f6ef4f3b..a5c748a82 100644 --- a/components/zcash_address/src/kind/unified.rs +++ b/components/zcash_address/src/kind/unified.rs @@ -123,7 +123,7 @@ impl fmt::Display for ParseError { impl Error for ParseError {} -mod private { +pub(crate) mod private { use super::{ParseError, Typecode}; use std::{cmp, convert::TryFrom}; @@ -136,6 +136,10 @@ mod private { } pub trait SealedContainer { + const MAINNET: &'static str; + const TESTNET: &'static str; + const REGTEST: &'static str; + type Receiver: SealedReceiver; fn from_inner(receivers: Vec) -> Self; @@ -146,10 +150,6 @@ use private::SealedReceiver; /// Trait providing common encoding logic for Unified containers. pub trait Unified: private::SealedContainer + std::marker::Sized { - const MAINNET: &'static str; - const TESTNET: &'static str; - const REGTEST: &'static str; - fn try_from_bytes(hrp: &str, buf: &[u8]) -> Result { fn read_receiver( mut cursor: &mut std::io::Cursor<&[u8]>, diff --git a/components/zcash_address/src/kind/unified/address.rs b/components/zcash_address/src/kind/unified/address.rs index 22b695273..32292695f 100644 --- a/components/zcash_address/src/kind/unified/address.rs +++ b/components/zcash_address/src/kind/unified/address.rs @@ -76,14 +76,6 @@ impl SealedReceiver for Receiver { pub struct Address(pub(crate) Vec); impl super::private::SealedContainer for Address { - type Receiver = Receiver; - - fn from_inner(receivers: Vec) -> Self { - Self(receivers) - } -} - -impl super::Unified for Address { /// The HRP for a Bech32m-encoded mainnet Unified Address. /// /// Defined in [ZIP 316][zip-0316]. @@ -101,6 +93,14 @@ impl super::Unified for Address { /// The HRP for a Bech32m-encoded regtest Unified Address. const REGTEST: &'static str = "uregtest"; + type Receiver = Receiver; + + fn from_inner(receivers: Vec) -> Self { + Self(receivers) + } +} + +impl super::Unified for Address { /// Returns the receivers contained within this address, in the order they were /// parsed from the string encoding. /// @@ -117,7 +117,7 @@ pub(crate) mod test_vectors; mod tests { use assert_matches::assert_matches; - use crate::kind::unified::Unified; + use crate::kind::unified::{private::SealedContainer, Unified}; use proptest::{ array::{uniform11, uniform20, uniform32}, prelude::*,