Skip to main content

TryFromAddress

Trait TryFromAddress 

Source
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§

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: NetworkType, data: [u8; 64], ) -> Result<Self, ConversionError<Self::Error>>

Source

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

Source

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

Source

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

Source

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

Source

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".

Implementations on Foreign Types§

Source§

impl<T: TryFromAddress> TryFromAddress for (NetworkType, T)

Source§

type Error = <T as TryFromAddress>::Error

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Implementors§