pub struct NameMap<K: Clone + Hash + Eq + Ord, V> { /* private fields */ }
Expand description
A semver-aware map for imports/exports of a component.
This data structure is used when looking up the names of imports/exports of
a component to enable semver-compatible matching of lookups. This will
enable lookups of a:b/c@0.2.0
to match entries defined as a:b/c@0.2.1
which is currently considered a key feature of WASI’s compatibility story.
On the outside this looks like a map of K
to V
.
Implementations§
source§impl<K, V> NameMap<K, V>
impl<K, V> NameMap<K, V>
sourcepub fn insert<I>(
&mut self,
name: &str,
cx: &mut I,
allow_shadowing: bool,
item: V,
) -> Result<K>where
I: NameMapIntern<Key = K>,
pub fn insert<I>(
&mut self,
name: &str,
cx: &mut I,
allow_shadowing: bool,
item: V,
) -> Result<K>where
I: NameMapIntern<Key = K>,
Inserts the name
specified into this map.
The name is intern’d through the cx
argument and shadowing is
controlled by the allow_shadowing
variable.
This function will automatically insert an entry in
self.alternate_lookups
if name
is a semver-looking name.
Returns an error if allow_shadowing
is false
and the name
is
already present in this map (by exact match). Otherwise returns the
intern’d version of name
.
sourcepub fn get<I>(&self, name: &str, cx: &I) -> Option<&V>where
I: NameMapIntern<Key = K>,
pub fn get<I>(&self, name: &str, cx: &I) -> Option<&V>where
I: NameMapIntern<Key = K>,
Looks up name
within this map, using the interning specified by
cx
.
This may return a definition even if name
wasn’t exactly defined in
this map, such as looking up a:b/c@0.2.0
when the map only has
a:b/c@0.2.1
defined.
sourcepub fn raw_iter(&self) -> impl Iterator<Item = (&K, &V)>
pub fn raw_iter(&self) -> impl Iterator<Item = (&K, &V)>
Returns an iterator over inserted values in this map.
Note that the iterator return yields intern’d keys and additionally does
not do anything special with semver names and such, it only literally
yields what’s been inserted with NameMap::insert
.
sourcepub fn raw_get_mut(&mut self, key: &K) -> Option<&mut V>
pub fn raw_get_mut(&mut self, key: &K) -> Option<&mut V>
TODO
Trait Implementations§
source§impl<'de, K, V> Deserialize<'de> for NameMap<K, V>
impl<'de, K, V> Deserialize<'de> for NameMap<K, V>
source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Auto Trait Implementations§
impl<K, V> Freeze for NameMap<K, V>
impl<K, V> RefUnwindSafe for NameMap<K, V>where
K: RefUnwindSafe,
V: RefUnwindSafe,
impl<K, V> Send for NameMap<K, V>
impl<K, V> Sync for NameMap<K, V>
impl<K, V> Unpin for NameMap<K, V>
impl<K, V> UnwindSafe for NameMap<K, V>where
K: UnwindSafe,
V: UnwindSafe,
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)