Skip to content

Commit

Permalink
fix: deno_resolver crate without 'sync' feature (#27403)
Browse files Browse the repository at this point in the history
  • Loading branch information
bartlomieju authored Dec 17, 2024
1 parent ee9f24c commit d632ec9
Showing 1 changed file with 21 additions and 7 deletions.
28 changes: 21 additions & 7 deletions resolvers/deno/sync.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,21 +13,35 @@ mod inner {

#[cfg(not(feature = "sync"))]
mod inner {
use std::cell::Ref;
use std::cell::RefCell;
use std::collections::HashMap;
use std::hash::BuildHasher;
use std::hash::Hash;
use std::hash::RandomState;
pub use std::rc::Rc as MaybeArc;

// Wrapper struct that exposes a subset of `DashMap` API.
#[derive(Default)]
struct MaybeDashMap<K, V, S = RandomState>(RefCell<HashMap<K, V, S>>);
#[derive(Debug)]
pub struct MaybeDashMap<K, V, S = RandomState>(RefCell<HashMap<K, V, S>>);

impl<K, V, S> Default for MaybeDashMap<K, V, S>
where
K: Eq + Hash,
S: Default + BuildHasher + Clone,
{
fn default() -> Self {
Self(RefCell::new(Default::default()))
}
}

impl MaybeDashMap<K, V, S> {
pub fn get(&'a self, key: &K) -> Option<&'a V> {
let inner = self.0.borrow();
inner.get(key)
impl<K: Eq + Hash, V, S: BuildHasher> MaybeDashMap<K, V, S> {
pub fn get<'a>(&'a self, key: &K) -> Option<Ref<'a, V>> {
Ref::filter_map(self.0.borrow(), |map| map.get(key)).ok()
}

pub fn insert(&self, key: K, value: V) -> Option<V> {
let inner = self.0.borrow_mut();
let mut inner = self.0.borrow_mut();
inner.insert(key, value)
}
}
Expand Down

0 comments on commit d632ec9

Please sign in to comment.