Skip to content

Commit

Permalink
core: avoid collect in search_used_signers method
Browse files Browse the repository at this point in the history
  • Loading branch information
yukibtc committed Mar 7, 2024
1 parent 738c5da commit 85f82c8
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 17 deletions.
3 changes: 1 addition & 2 deletions bindings/smartvaults-sdk-ffi/src/policy/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -76,8 +76,7 @@ impl Policy {
pub fn search_used_signers(&self, signers: Vec<Arc<Signer>>) -> Result<Vec<Arc<Signer>>> {
Ok(self
.inner
.search_used_signers(signers.into_iter().map(|s| s.as_ref().deref().clone()))?
.into_iter()
.search_used_signers(signers.into_iter().map(|s| s.as_ref().deref().clone()))
.map(|s| Arc::new(s.into()))
.collect())
}
Expand Down
31 changes: 16 additions & 15 deletions crates/smartvaults-core/src/policy/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -422,19 +422,19 @@ impl Policy {
}

/// Search used signers in this [`Policy`]
pub fn search_used_signers<I>(&self, my_signers: I) -> Result<Vec<Signer>, Error>
pub fn search_used_signers<I>(&self, my_signers: I) -> impl Iterator<Item = Signer>
where
I: Iterator<Item = Signer>,
{
let descriptor: String = self.descriptor.to_string();
let mut list: Vec<Signer> = Vec::new();
for signer in my_signers.into_iter() {
let signer_descriptor: String = signer.descriptor_public_key()?.to_string();
if descriptor.contains(&signer_descriptor) && !list.contains(&signer) {
list.push(signer);
my_signers.into_iter().filter_map(move |signer| {
let signer_descriptor: String = signer.descriptor_public_key().ok()?.to_string();
if descriptor.contains(&signer_descriptor) {
Some(signer)
} else {
None
}
}
Ok(list)
})
}

/// Search and map the selectable conditions for the passed [Signer]
Expand Down Expand Up @@ -578,14 +578,15 @@ impl Policy {
where
I: Iterator<Item = Signer>,
{
let used_signers: Vec<Signer> = self.search_used_signers(my_signers)?;

#[allow(clippy::mutable_key_type)]
let mut map = HashMap::with_capacity(used_signers.len());
for signer in used_signers.into_iter() {
let pp: Option<PolicyPathSelector> = self.get_policy_path_from_signer(&signer)?;
map.insert(signer, pp);
}
let map: HashMap<Signer, Option<PolicyPathSelector>> = self
.search_used_signers(my_signers)
.filter_map(|signer| {
let pp: Option<PolicyPathSelector> =
self.get_policy_path_from_signer(&signer).ok()?;
Some((signer, pp))
})
.collect();

if map.is_empty() {
Ok(PolicyPath::None)
Expand Down

0 comments on commit 85f82c8

Please sign in to comment.