identity_document/utils/
queryable.rs1use identity_core::common::KeyComparable;
5use identity_core::common::OrderedSet;
6
7use crate::utils::DIDUrlQuery;
8use identity_did::DIDUrl;
9
10pub trait Queryable<T, Q> {
15 fn query(&self, query: Q) -> Option<&T>;
17 fn query_mut(&mut self, query: Q) -> Option<&mut T>;
19}
20
21impl<'query, T, Q> Queryable<T, Q> for OrderedSet<T>
22where
23 T: KeyComparable,
24 <T as KeyComparable>::Key: AsRef<DIDUrl>,
25 Q: Into<DIDUrlQuery<'query>>,
26{
27 fn query(&self, query: Q) -> Option<&T> {
28 let query: DIDUrlQuery<'query> = query.into();
29 self.iter().find(|entry| query.matches(entry.key().as_ref()))
30 }
31
32 fn query_mut(&mut self, query: Q) -> Option<&mut T> {
34 let query: DIDUrlQuery<'query> = query.into();
35 self
36 .iter_mut_unchecked()
37 .find(|entry| query.matches(entry.key().as_ref()))
38 }
39}