1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
//! Specifies an abstract `AddressEncoder` that is used to convert `Address` to/from the in-memory
//! representation of the associated spending constraint.
use crate::types::tx::RecipientIdentifier;
/// An AddressEncoder encodes and decodes addresses. This struct is used by the Builder to decode
/// addresses, and is associated with a Network object. It handles converting addresses to
/// recipients and vice versa. It also contains a function that wraps a string in the appropriate
/// address type.
///
/// This trait exists to maintain conceptual separation between the user-facing `Address` and the
/// protocol-facing `RecipientIdentifier`.
///
/// A Bitcoin encoder can be found in the `bitcoin` crate.
pub trait AddressEncoder {
/// A type representing the user-facing address, with any disambiguating information.
type Address;
/// An error type that will be returned in case of encoding errors
type Error;
/// A type representing the in-protocol recipient. This is usually different from the
/// Address type. The encoder converts between `Strings`, `Address`es, and
/// `RecipientIdentifier`s
type RecipientIdentifier: RecipientIdentifier;
/// Attempt to encode a `RecipientIdentifier` as an `Address`.
fn encode_address(s: &Self::RecipientIdentifier) -> Result<Self::Address, Self::Error>;
/// Decode a `RecipientIdentifier` from an `Address`. Addresses should be defined such that
/// this cannot fail.
fn decode_address(addr: &Self::Address) -> Self::RecipientIdentifier;
/// Attempt to convert a string into an `Address`.
fn string_to_address(s: &str) -> Result<Self::Address, Self::Error>;
}