From 72a734ed66b5ef4cb36d99b2b08bca457151a37e Mon Sep 17 00:00:00 2001 From: Dr Maxim Orlovsky Date: Sun, 19 Nov 2023 13:41:57 +0100 Subject: [PATCH] descriptor: make keychains method returni owned set --- descriptors/src/descriptor.rs | 2 +- descriptors/src/segwit.rs | 2 +- descriptors/src/taproot.rs | 2 +- std/src/derive.rs | 8 ++++---- std/src/path.rs | 14 +++++++++----- 5 files changed, 16 insertions(+), 12 deletions(-) diff --git a/descriptors/src/descriptor.rs b/descriptors/src/descriptor.rs index 2c874e1..73b0e14 100644 --- a/descriptors/src/descriptor.rs +++ b/descriptors/src/descriptor.rs @@ -147,7 +147,7 @@ impl Derive for StdDescr { } } - fn keychains(&self) -> &BTreeSet { + fn keychains(&self) -> BTreeSet { match self { StdDescr::Wpkh(d) => d.keychains(), StdDescr::TrKey(d) => d.keychains(), diff --git a/descriptors/src/segwit.rs b/descriptors/src/segwit.rs index e56cebc..dc905c7 100644 --- a/descriptors/src/segwit.rs +++ b/descriptors/src/segwit.rs @@ -45,7 +45,7 @@ impl Derive for Wpkh { fn default_keychain(&self) -> Keychain { self.0.default_keychain() } #[inline] - fn keychains(&self) -> &BTreeSet { self.0.keychains() } + fn keychains(&self) -> BTreeSet { self.0.keychains() } fn derive( &self, diff --git a/descriptors/src/taproot.rs b/descriptors/src/taproot.rs index b6afaf8..df529cf 100644 --- a/descriptors/src/taproot.rs +++ b/descriptors/src/taproot.rs @@ -45,7 +45,7 @@ impl Derive for TrKey { fn default_keychain(&self) -> Keychain { self.0.default_keychain() } #[inline] - fn keychains(&self) -> &BTreeSet { self.0.keychains() } + fn keychains(&self) -> BTreeSet { self.0.keychains() } fn derive( &self, diff --git a/std/src/derive.rs b/std/src/derive.rs index ee98634..43cbd92 100644 --- a/std/src/derive.rs +++ b/std/src/derive.rs @@ -283,7 +283,7 @@ impl FromStr for DerivedAddr { pub trait Derive { fn default_keychain(&self) -> Keychain; - fn keychains(&self) -> &BTreeSet; + fn keychains(&self) -> BTreeSet; fn derive(&self, keychain: impl Into, index: impl Into) -> D; @@ -364,7 +364,7 @@ impl Derive for XpubDerivable { fn default_keychain(&self) -> Keychain { self.keychains.first() } #[inline] - fn keychains(&self) -> &BTreeSet { self.keychains.as_ref() } + fn keychains(&self) -> BTreeSet { self.keychains.to_set() } fn derive(&self, keychain: impl Into, index: impl Into) -> LegacyPk { self.xpub().derive_pub([keychain.into().into(), index.into()]).to_legacy_pub() @@ -376,7 +376,7 @@ impl Derive for XpubDerivable { fn default_keychain(&self) -> Keychain { self.keychains.first() } #[inline] - fn keychains(&self) -> &BTreeSet { self.keychains.as_ref() } + fn keychains(&self) -> BTreeSet { self.keychains.to_set() } fn derive(&self, keychain: impl Into, index: impl Into) -> CompressedPk { self.xpub().derive_pub([keychain.into().into(), index.into()]).to_compr_pub() @@ -388,7 +388,7 @@ impl Derive for XpubDerivable { fn default_keychain(&self) -> Keychain { self.keychains.first() } #[inline] - fn keychains(&self) -> &BTreeSet { self.keychains.as_ref() } + fn keychains(&self) -> BTreeSet { self.keychains.to_set() } fn derive(&self, keychain: impl Into, index: impl Into) -> XOnlyPk { self.xpub().derive_pub([keychain.into().into(), index.into()]).to_xonly_pub() diff --git a/std/src/path.rs b/std/src/path.rs index 983b30c..d43571d 100644 --- a/std/src/path.rs +++ b/std/src/path.rs @@ -66,17 +66,21 @@ impl DerivationSeg { .first() .expect("confined type guarantees that there is at least one item in the collection") } + + #[inline] + pub fn into_set(self) -> BTreeSet { self.0.into_inner() } + + #[inline] + pub fn to_set(&self) -> BTreeSet { self.0.to_inner() } + + #[inline] + pub fn as_set(&self) -> &BTreeSet { self.0.as_inner() } } impl DerivationSeg { pub fn standard() -> Self { DerivationSeg(confined_bset![NormalIndex::ZERO, NormalIndex::ONE]) } } -impl AsRef> for DerivationSeg { - #[inline] - fn as_ref(&self) -> &BTreeSet { &self.0.as_inner() } -} - impl Index for DerivationSeg { type Output = I;