Skip to main content

jsonld_core/loader/
map.rs

1use super::{Loader, RemoteDocument};
2use crate::LoadError;
3use iri_rs::{Iri, IriBuf};
4use std::collections::{BTreeMap, HashMap};
5
6/// Error returned using [`HashMap`] or [`BTreeMap`] as a [`Loader`] when the
7/// requested document is not found.
8#[derive(Debug, thiserror::Error)]
9#[error("document not found")]
10pub struct EntryNotFound;
11
12impl<S: std::hash::BuildHasher + Send + Sync> Loader for HashMap<IriBuf, RemoteDocument, S> {
13    type Error = EntryNotFound;
14
15    async fn load(&self, url: Iri<&str>) -> Result<RemoteDocument<IriBuf>, LoadError<Self::Error>> {
16        match self.get(url.as_str()) {
17            Some(document) => Ok(document.clone()),
18            None => Err(LoadError::new(url.into(), EntryNotFound)),
19        }
20    }
21}
22
23impl Loader for BTreeMap<IriBuf, RemoteDocument> {
24    type Error = EntryNotFound;
25
26    async fn load(&self, url: Iri<&str>) -> Result<RemoteDocument<IriBuf>, LoadError<Self::Error>> {
27        match self.get(url.as_str()) {
28            Some(document) => Ok(document.clone()),
29            None => Err(LoadError::new(url.into(), EntryNotFound)),
30        }
31    }
32}