pub trait TryFromAddress: Sized {
    type Error;

    // Provided methods
    fn try_from_sprout(
        net: Network,
        data: [u8; 64]
    ) -> Result<Self, ConversionError<Self::Error>> { ... }
    fn try_from_sapling(
        net: Network,
        data: [u8; 43]
    ) -> Result<Self, ConversionError<Self::Error>> { ... }
    fn try_from_unified(
        net: Network,
        data: Address
    ) -> Result<Self, ConversionError<Self::Error>> { ... }
    fn try_from_transparent_p2pkh(
        net: Network,
        data: [u8; 20]
    ) -> Result<Self, ConversionError<Self::Error>> { ... }
    fn try_from_transparent_p2sh(
        net: Network,
        data: [u8; 20]
    ) -> Result<Self, ConversionError<Self::Error>> { ... }
    fn try_from_tex(
        net: Network,
        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, Network, TryFromAddress, UnsupportedAddress, ZcashAddress};

#[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: Network,
        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§

source

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§

source

fn try_from_sprout( net: Network, data: [u8; 64] ) -> Result<Self, ConversionError<Self::Error>>

source

fn try_from_sapling( net: Network, data: [u8; 43] ) -> Result<Self, ConversionError<Self::Error>>

source

fn try_from_unified( net: Network, data: Address ) -> Result<Self, ConversionError<Self::Error>>

source

fn try_from_transparent_p2pkh( net: Network, data: [u8; 20] ) -> Result<Self, ConversionError<Self::Error>>

source

fn try_from_transparent_p2sh( net: Network, data: [u8; 20] ) -> Result<Self, ConversionError<Self::Error>>

source

fn try_from_tex( net: Network, data: [u8; 20] ) -> Result<Self, ConversionError<Self::Error>>

Object Safety§

This trait is not object safe.

Implementations on Foreign Types§

source§

impl<T: TryFromRawAddress> TryFromAddress for (Network, T)

§

type Error = <T as TryFromRawAddress>::Error

source§

fn try_from_sprout( net: Network, data: [u8; 64] ) -> Result<Self, ConversionError<Self::Error>>

source§

fn try_from_sapling( net: Network, data: [u8; 43] ) -> Result<Self, ConversionError<Self::Error>>

source§

fn try_from_unified( net: Network, data: Address ) -> Result<Self, ConversionError<Self::Error>>

source§

fn try_from_transparent_p2pkh( net: Network, data: [u8; 20] ) -> Result<Self, ConversionError<Self::Error>>

source§

fn try_from_transparent_p2sh( net: Network, data: [u8; 20] ) -> Result<Self, ConversionError<Self::Error>>

source§

fn try_from_tex( net: Network, data: [u8; 20] ) -> Result<Self, ConversionError<Self::Error>>

Implementors§