pub trait TryFromAddress: Sized {
type Error;
// Provided methods
fn try_from_sprout(
net: NetworkType,
data: [u8; 64],
) -> Result<Self, ConversionError<Self::Error>> { ... }
fn try_from_sapling(
net: NetworkType,
data: [u8; 43],
) -> Result<Self, ConversionError<Self::Error>> { ... }
fn try_from_unified(
net: NetworkType,
data: Address,
) -> Result<Self, ConversionError<Self::Error>> { ... }
fn try_from_transparent_p2pkh(
net: NetworkType,
data: [u8; 20],
) -> Result<Self, ConversionError<Self::Error>> { ... }
fn try_from_transparent_p2sh(
net: NetworkType,
data: [u8; 20],
) -> Result<Self, ConversionError<Self::Error>> { ... }
fn try_from_tex(
net: NetworkType,
data: [u8; 20],
) -> Result<Self, ConversionError<Self::Error>> { ... }
}
Expand description
A helper trait for converting a ZcashAddress
into another type.
§Examples
use zcash_address::{ConversionError, TryFromAddress, UnsupportedAddress, ZcashAddress};
use zcash_protocol::consensus::NetworkType;
#[derive(Debug)]
struct MySapling([u8; 43]);
// Implement the TryFromAddress trait, overriding whichever conversion methods match your
// requirements for the resulting type.
impl TryFromAddress for MySapling {
// In this example we aren't checking the validity of the inner Sapling address,
// but your code should do so!
type Error = &'static str;
fn try_from_sapling(
net: NetworkType,
data: [u8; 43],
) -> Result<Self, ConversionError<Self::Error>> {
Ok(MySapling(data))
}
}
// For a supported address type, the conversion works.
let addr: ZcashAddress =
"zs1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpq6d8g"
.parse()
.unwrap();
assert!(addr.convert::<MySapling>().is_ok());
// For an unsupported address type, we get an error.
let addr: ZcashAddress = "t1Hsc1LR8yKnbbe3twRp88p6vFfC5t7DLbs".parse().unwrap();
assert_eq!(
addr.convert::<MySapling>().unwrap_err().to_string(),
"Zcash transparent P2PKH addresses are not supported",
);
Required Associated Types§
Sourcetype Error
type Error
Conversion errors for the user type (e.g. failing to parse the data passed to
Self::try_from_sapling
as a valid Sapling address).
Provided Methods§
fn try_from_sprout( net: NetworkType, data: [u8; 64], ) -> Result<Self, ConversionError<Self::Error>>
fn try_from_sapling( net: NetworkType, data: [u8; 43], ) -> Result<Self, ConversionError<Self::Error>>
fn try_from_unified( net: NetworkType, data: Address, ) -> Result<Self, ConversionError<Self::Error>>
fn try_from_transparent_p2pkh( net: NetworkType, data: [u8; 20], ) -> Result<Self, ConversionError<Self::Error>>
fn try_from_transparent_p2sh( net: NetworkType, data: [u8; 20], ) -> Result<Self, ConversionError<Self::Error>>
fn try_from_tex( net: NetworkType, data: [u8; 20], ) -> Result<Self, ConversionError<Self::Error>>
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.