use super::*;
pub use cml_chain::address::{AddressHeaderKind, AddressKind};
use cml_core::CertificateIndex;
use cml_core_wasm::{impl_wasm_conversions, impl_wasm_json_api};
use crate::certs::StakeCredential;
#[wasm_bindgen]
#[derive(Clone, Debug)]
pub struct Address(cml_chain::address::Address);
impl_wasm_conversions!(cml_chain::address::Address, Address);
impl_wasm_json_api!(Address);
#[wasm_bindgen]
impl Address {
pub fn header(&self) -> u8 {
self.0.header()
}
pub fn header_matches_kind(header: u8, kind: AddressHeaderKind) -> bool {
cml_chain::address::Address::header_matches_kind(header, kind)
}
pub fn to_bech32(&self, prefix: Option<String>) -> Result<String, JsError> {
self.0.to_bech32(prefix).map_err(Into::into)
}
pub fn from_bech32(bech_str: String) -> Result<Address, JsError> {
cml_chain::address::Address::from_bech32(&bech_str)
.map(Into::into)
.map_err(Into::into)
}
pub fn is_valid_bech32(bech_str: String) -> bool {
cml_chain::address::Address::is_valid_bech32(&bech_str)
}
pub fn is_valid(bech_str: String) -> bool {
cml_chain::address::Address::is_valid(&bech_str)
}
pub fn network_id(&self) -> Result<u8, JsError> {
self.0.network_id().map_err(Into::into)
}
pub fn payment_cred(&self) -> Option<StakeCredential> {
self.0.payment_cred().cloned().map(Into::into)
}
pub fn staking_cred(&self) -> Option<StakeCredential> {
self.0.staking_cred().cloned().map(Into::into)
}
pub fn kind(&self) -> AddressKind {
self.0.kind()
}
pub fn to_raw_bytes(&self) -> Vec<u8> {
self.0.to_raw_bytes()
}
pub fn from_raw_bytes(data: &[u8]) -> Result<Address, JsError> {
cml_chain::address::Address::from_raw_bytes(data)
.map(Self)
.map_err(Into::into)
}
pub fn to_hex(&self) -> String {
self.0.to_hex()
}
pub fn from_hex(hex: &str) -> Result<Address, JsError> {
cml_chain::address::Address::from_hex(hex)
.map(Into::into)
.map_err(Into::into)
}
}
#[wasm_bindgen]
#[derive(Clone, Debug)]
pub struct BaseAddress(cml_chain::address::BaseAddress);
impl_wasm_conversions!(cml_chain::address::BaseAddress, BaseAddress);
#[wasm_bindgen]
impl BaseAddress {
pub fn new(network: u8, payment: &StakeCredential, stake: &StakeCredential) -> Self {
Self(cml_chain::address::BaseAddress::new(
network,
payment.as_ref().clone(),
stake.as_ref().clone(),
))
}
pub fn to_address(&self) -> Address {
Address(self.0.clone().to_address())
}
pub fn from_address(address: &Address) -> Option<BaseAddress> {
match &address.0 {
cml_chain::address::Address::Base(ba) => Some(ba.clone().into()),
_ => None,
}
}
pub fn network_id(&self) -> u8 {
self.0.network
}
pub fn payment(&self) -> StakeCredential {
self.0.payment.clone().into()
}
pub fn stake(&self) -> StakeCredential {
self.0.stake.clone().into()
}
}
#[wasm_bindgen]
#[derive(Clone, Debug)]
pub struct EnterpriseAddress(cml_chain::address::EnterpriseAddress);
impl_wasm_conversions!(cml_chain::address::EnterpriseAddress, EnterpriseAddress);
#[wasm_bindgen]
impl EnterpriseAddress {
pub fn new(network: u8, payment: &StakeCredential) -> Self {
Self(cml_chain::address::EnterpriseAddress::new(
network,
payment.as_ref().clone(),
))
}
pub fn to_address(&self) -> Address {
Address(self.0.clone().to_address())
}
pub fn from_address(address: &Address) -> Option<EnterpriseAddress> {
match &address.0 {
cml_chain::address::Address::Enterprise(ea) => Some(ea.clone().into()),
_ => None,
}
}
pub fn network_id(&self) -> u8 {
self.0.network
}
pub fn payment(&self) -> StakeCredential {
self.0.payment.clone().into()
}
}
#[wasm_bindgen]
#[derive(Clone, Debug)]
pub struct Pointer(cml_chain::address::Pointer);
impl_wasm_conversions!(cml_chain::address::Pointer, Pointer);
impl Pointer {
pub fn new(slot: Slot, tx_index: TransactionIndex, cert_index: CertificateIndex) -> Self {
Self(cml_chain::address::Pointer::new(slot, tx_index, cert_index))
}
pub fn slot(&self) -> Slot {
self.0.slot()
}
pub fn tx_index(&self) -> Slot {
self.0.tx_index()
}
pub fn cert_index(&self) -> Slot {
self.0.cert_index()
}
}
#[wasm_bindgen]
#[derive(Clone, Debug)]
pub struct PointerAddress(cml_chain::address::PointerAddress);
impl_wasm_conversions!(cml_chain::address::PointerAddress, PointerAddress);
#[wasm_bindgen]
impl PointerAddress {
pub fn new(network: u8, payment: &StakeCredential, stake: &Pointer) -> Self {
Self(cml_chain::address::PointerAddress::new(
network,
payment.as_ref().clone(),
stake.as_ref().clone(),
))
}
pub fn to_address(&self) -> Address {
Address(self.0.clone().to_address())
}
pub fn from_address(address: &Address) -> Option<PointerAddress> {
match &address.0 {
cml_chain::address::Address::Ptr(pa) => Some(pa.clone().into()),
_ => None,
}
}
pub fn network_id(&self) -> u8 {
self.0.network
}
pub fn payment(&self) -> StakeCredential {
self.0.payment.clone().into()
}
pub fn stake(&self) -> Pointer {
self.0.stake.clone().into()
}
}
pub type RewardAccount = RewardAddress;
#[wasm_bindgen]
#[derive(Clone, Debug)]
pub struct RewardAddress(cml_chain::address::RewardAddress);
impl_wasm_conversions!(cml_chain::address::RewardAddress, RewardAddress);
impl_wasm_json_api!(RewardAddress);
#[wasm_bindgen]
impl RewardAddress {
pub fn new(network: u8, payment: &StakeCredential) -> Self {
Self(cml_chain::address::RewardAddress::new(
network,
payment.as_ref().clone(),
))
}
pub fn to_address(&self) -> Address {
Address(self.0.clone().to_address())
}
pub fn from_address(address: &Address) -> Option<RewardAddress> {
match &address.0 {
cml_chain::address::Address::Reward(ra) => Some(ra.clone().into()),
_ => None,
}
}
pub fn network_id(&self) -> u8 {
self.0.network
}
pub fn payment(&self) -> StakeCredential {
self.0.payment.clone().into()
}
}