Skip to content

Commit

Permalink
derive: add XpubDerivable constructors
Browse files Browse the repository at this point in the history
Closes #27
  • Loading branch information
dr-orlovsky committed May 24, 2024
1 parent 5f65745 commit 081db88
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 0 deletions.
18 changes: 18 additions & 0 deletions derive/src/path.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,24 @@ pub enum DerivationParseError {
#[derive(Clone, Eq, PartialEq, Hash, Debug)]
pub struct DerivationSeg<I: IdxBase = NormalIndex>(Confined<BTreeSet<I>, 1, 8>);

impl<I: IdxBase> From<&'static [I]> for DerivationSeg<I> {
fn from(indexes: &'static [I]) -> Self {
Self(Confined::from_iter_unsafe(indexes.into_iter().copied()))
}
}

impl<I: IdxBase> From<[I; 2]> for DerivationSeg<I> {
fn from(indexes: [I; 2]) -> Self { Self(Confined::from_iter_unsafe(indexes)) }
}

impl<I: IdxBase> From<[I; 3]> for DerivationSeg<I> {
fn from(indexes: [I; 3]) -> Self { Self(Confined::from_iter_unsafe(indexes)) }
}

impl<I: IdxBase> From<[I; 4]> for DerivationSeg<I> {
fn from(indexes: [I; 4]) -> Self { Self(Confined::from_iter_unsafe(indexes)) }
}

impl<I: IdxBase> DerivationSeg<I> {
pub fn new(index: I) -> Self { DerivationSeg(confined_bset![index]) }

Expand Down
26 changes: 26 additions & 0 deletions derive/src/xpub.rs
Original file line number Diff line number Diff line change
Expand Up @@ -495,7 +495,33 @@ pub struct XpubDerivable {
pub(crate) keychains: DerivationSeg<Keychain>,
}

impl From<XpubSpec> for XpubDerivable {
fn from(spec: XpubSpec) -> Self {
XpubDerivable {
spec,
variant: None,
keychains: DerivationSeg::from([Keychain::INNER, Keychain::OUTER]),
}
}
}

impl XpubDerivable {
pub fn new(xpub: Xpub, origin: XpubOrigin) -> Self {
XpubDerivable {
spec: XpubSpec::new(xpub, origin),
variant: None,
keychains: DerivationSeg::from([Keychain::INNER, Keychain::OUTER]),
}
}

pub fn with(xpub: Xpub, origin: XpubOrigin, keychains: &'static [Keychain]) -> Self {
XpubDerivable {
spec: XpubSpec::new(xpub, origin),
variant: None,
keychains: DerivationSeg::from(keychains),
}
}

pub fn xpub(&self) -> Xpub { self.spec.xpub }

pub fn origin(&self) -> &XpubOrigin { &self.spec.origin }
Expand Down

0 comments on commit 081db88

Please sign in to comment.