Simplify MutexMap generic constraints.

Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
Jason Volk
2026-01-13 07:33:31 +00:00
parent 05898034e5
commit cf8b57b751
3 changed files with 14 additions and 19 deletions

View File

@@ -1,4 +1,5 @@
use std::{
borrow::ToOwned,
fmt::Debug,
hash::Hash,
sync::{Arc, TryLockError::WouldBlock},
@@ -38,17 +39,15 @@ where
}
#[tracing::instrument(level = "trace", skip(self))]
pub async fn lock<'a, K>(&'a self, k: &'a K) -> Guard<Key, Val>
pub async fn lock<K>(&self, k: &K) -> Guard<Key, Val>
where
K: Debug + Send + ?Sized + Sync,
Key: TryFrom<&'a K>,
<Key as TryFrom<&'a K>>::Error: Debug,
K: Debug + Send + ?Sized + Sync + ToOwned<Owned = Key>,
{
let val = self
.map
.lock()
.expect("locked")
.entry(k.try_into().expect("failed to construct key"))
.entry(k.to_owned())
.or_default()
.clone();
@@ -59,17 +58,15 @@ where
}
#[tracing::instrument(level = "trace", skip(self))]
pub fn try_lock<'a, K>(&self, k: &'a K) -> Result<Guard<Key, Val>>
pub fn try_lock<K>(&self, k: &K) -> Result<Guard<Key, Val>>
where
K: Debug + Send + ?Sized + Sync,
Key: TryFrom<&'a K>,
<Key as TryFrom<&'a K>>::Error: Debug,
K: Debug + Send + ?Sized + Sync + ToOwned<Owned = Key>,
{
let val = self
.map
.lock()
.expect("locked")
.entry(k.try_into().expect("failed to construct key"))
.entry(k.to_owned())
.or_default()
.clone();
@@ -82,11 +79,9 @@ where
}
#[tracing::instrument(level = "trace", skip(self))]
pub fn try_try_lock<'a, K>(&self, k: &'a K) -> Result<Guard<Key, Val>>
pub fn try_try_lock<K>(&self, k: &K) -> Result<Guard<Key, Val>>
where
K: Debug + Send + ?Sized + Sync,
Key: TryFrom<&'a K>,
<Key as TryFrom<&'a K>>::Error: Debug,
K: Debug + Send + ?Sized + Sync + ToOwned<Owned = Key>,
{
let val = self
.map
@@ -95,7 +90,7 @@ where
| WouldBlock => err!("would block"),
| _ => panic!("{e:?}"),
})?
.entry(k.try_into().expect("failed to construct key"))
.entry(k.to_owned())
.or_default()
.clone();

View File

@@ -43,7 +43,7 @@ impl super::Service {
return Ok((result, true));
}
let _dedup = self.resolving.lock(server_name.as_str());
let _dedup = self.resolving.lock(server_name);
if let Ok(result) = self.cache.get_destination(server_name).await {
return Ok((result, true));
}

View File

@@ -9,7 +9,8 @@ mod well_known;
use std::sync::Arc;
use async_trait::async_trait;
use tuwunel_core::{Result, arrayvec::ArrayString, smallstr::SmallString, utils::MutexMap};
use ruma::OwnedServerName;
use tuwunel_core::{Result, smallstr::SmallString, utils::MutexMap};
use self::{cache::Cache, dns::Resolver, fed::FedDest};
@@ -21,8 +22,7 @@ pub struct Service {
}
pub(crate) type DestString = SmallString<[u8; 40]>;
type Resolving = MutexMap<NameBuf, ()>;
type NameBuf = ArrayString<256>;
type Resolving = MutexMap<OwnedServerName, ()>;
#[async_trait]
impl crate::Service for Service {