pub mod eds; pub use eds::EDSContactResolverBackend; pub trait ContactResolverBackend { type ContactID; fn resolve_contact_id(&self, address: &str) -> Option; fn get_contact_display_name(&self, contact_id: &Self::ContactID) -> Option; } pub type AnyContactID = String; pub struct ContactResolver { backend: T, } impl ContactResolver where T::ContactID: From, T::ContactID: Into, T: Default, { pub fn new(backend: T) -> Self { Self { backend } } pub fn resolve_contact_id(&self, address: &str) -> Option { self.backend.resolve_contact_id(address).map(|id| id.into()) } pub fn get_contact_display_name(&self, contact_id: &AnyContactID) -> Option { let backend_contact_id: T::ContactID = T::ContactID::from((*contact_id).clone()); self.backend.get_contact_display_name(&backend_contact_id) } } impl Default for ContactResolver where T::ContactID: From, T::ContactID: Into, T: Default, { fn default() -> Self { Self::new(T::default()) } }