kind::unified: Introduce private::SealedReceiver trait.

Co-authored-by: Jack Grigg <jack@electriccoin.co>
This commit is contained in:
therealyingtong 2021-11-28 18:18:25 -05:00
parent 406e62e7e5
commit 18393eefa8
2 changed files with 18 additions and 5 deletions

View File

@ -116,3 +116,16 @@ impl fmt::Display for ParseError {
}
impl Error for ParseError {}
mod private {
use super::{ParseError, Typecode};
use std::{cmp, convert::TryFrom};
/// A raw address or viewing key.
pub trait SealedReceiver:
for<'a> TryFrom<(u32, &'a [u8]), Error = ParseError> + cmp::Ord + cmp::PartialOrd + Clone
{
fn typecode(&self) -> Typecode;
fn data(&self) -> &[u8];
}
}

View File

@ -1,4 +1,4 @@
use super::{ParseError, Typecode};
use super::{private::SealedReceiver, ParseError, Typecode};
use crate::kind;
use std::cmp;
@ -39,7 +39,7 @@ pub enum Receiver {
impl cmp::Ord for Receiver {
fn cmp(&self, other: &Self) -> cmp::Ordering {
match self.typecode().cmp(&other.typecode()) {
cmp::Ordering::Equal => self.addr().cmp(other.addr()),
cmp::Ordering::Equal => self.data().cmp(other.data()),
res => res,
}
}
@ -71,7 +71,7 @@ impl TryFrom<(u32, &[u8])> for Receiver {
}
}
impl Receiver {
impl SealedReceiver for Receiver {
fn typecode(&self) -> Typecode {
match self {
Receiver::P2pkh(_) => Typecode::P2pkh,
@ -82,7 +82,7 @@ impl Receiver {
}
}
fn addr(&self) -> &[u8] {
fn data(&self) -> &[u8] {
match self {
Receiver::P2pkh(data) => data,
Receiver::P2sh(data) => data,
@ -199,7 +199,7 @@ impl Address {
let mut writer = std::io::Cursor::new(Vec::new());
for receiver in &self.0 {
let addr = receiver.addr();
let addr = receiver.data();
CompactSize::write(
&mut writer,
<u32>::from(receiver.typecode()).try_into().unwrap(),