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", so this trait is not object safe.

Implementations on Foreign Types§

Source§

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

Source§

type Error = <T as TryFromRawAddress>::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§