identity_document/utils/
queryable.rsuse identity_core::common::KeyComparable;
use identity_core::common::OrderedSet;
use crate::utils::DIDUrlQuery;
use identity_did::DIDUrl;
pub trait Queryable<T, Q> {
fn query(&self, query: Q) -> Option<&T>;
fn query_mut(&mut self, query: Q) -> Option<&mut T>;
}
impl<'query, T, Q> Queryable<T, Q> for OrderedSet<T>
where
T: KeyComparable,
<T as KeyComparable>::Key: AsRef<DIDUrl>,
Q: Into<DIDUrlQuery<'query>>,
{
fn query(&self, query: Q) -> Option<&T> {
let query: DIDUrlQuery<'query> = query.into();
self.iter().find(|entry| query.matches(entry.key().as_ref()))
}
fn query_mut(&mut self, query: Q) -> Option<&mut T> {
let query: DIDUrlQuery<'query> = query.into();
self
.iter_mut_unchecked()
.find(|entry| query.matches(entry.key().as_ref()))
}
}