usestd::{borrow::Cow,hash::Hash};structSniMap(HashMap<PeerKey<'static>, Peer>);implSniMap{/// Get peer by SNI.
pub(crate)fnget<'s, 'sni:'s>(&'sself, sni:&'snistr)->Option<&'s Peer>{self.0.get(&PeerKey::Exact(Cow::Borrowed(sni))).or_else(||{self.0.get(&PeerKey::Subdomain(Cow::Borrowed( sni.split_once('.').map(|(_,prior)|prior).unwrap_or(sni),)))})}}#[derive(Debug, PartialEq, Eq)]enumPeerKey<'k> {/// Match exactly the SNI. This is the default mode.
////// Will be serialized or deserialized as `example.com`.
Exact(Cow<'k, str>),/// Subdomain match
////// Should be serialized or deserialized as `domain:example.com`.
////// ## Notice
////// Matches direct subdomains only; does not match nested subdomains
/// (second-level or deeper).
////// Take `domain:example.com` as an example, it will match `*.example.com`
/// but not `*.*.example.com`, etc.
Subdomain(Cow<'k, str>),}implHash forPeerKey<'_>{fnhash<H:std::hash::Hasher>(&self, state:&mut H){matchself{PeerKey::Exact(s)=> s.hash(state),PeerKey::Subdomain(s)=>{ state.write(b"domain:"); s.hash(state)}}}}structPeer{// ...
}