mirror of
https://github.com/denoland/deno.git
synced 2024-12-18 05:14:21 -05:00
fix: deno_resolver crate without 'sync' feature (#27403)
This commit is contained in:
parent
ee9f24cdcd
commit
d632ec9e70
1 changed files with 21 additions and 7 deletions
|
@ -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 MaybeDashMap<K, V, S> {
|
||||
pub fn get(&'a self, key: &K) -> Option<&'a V> {
|
||||
let inner = self.0.borrow();
|
||||
inner.get(key)
|
||||
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<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)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue