json_ld/core/loader/
map.rs1use rdf_syntax::{Iri, IriBuf};
2use std::{
3 collections::{BTreeMap, HashMap},
4 sync::LazyLock,
5};
6
7use crate::{JsonLdDocument, JsonLdLoadError};
8
9use super::{AsyncJsonLdLoader, JsonLdLoader};
10
11pub type StaticJsonLdLoader = LazyLock<HashMap<IriBuf, JsonLdDocument>>;
25
26#[derive(Debug, thiserror::Error)]
29#[error("document not found")]
30pub struct EntryNotFound;
31
32impl JsonLdLoader for HashMap<IriBuf, JsonLdDocument> {
33 fn load(&self, url: &Iri) -> Result<JsonLdDocument, JsonLdLoadError> {
34 match self.get(url) {
35 Some(document) => Ok(document.clone()),
36 None => Err(JsonLdLoadError::new(url.to_owned(), EntryNotFound)),
37 }
38 }
39}
40
41impl AsyncJsonLdLoader for HashMap<IriBuf, JsonLdDocument> {
42 async fn async_load(&self, url: &Iri) -> Result<JsonLdDocument, JsonLdLoadError> {
43 match self.get(url) {
44 Some(document) => Ok(document.clone()),
45 None => Err(JsonLdLoadError::new(url.to_owned(), EntryNotFound)),
46 }
47 }
48}
49
50impl JsonLdLoader for BTreeMap<IriBuf, JsonLdDocument> {
51 fn load(&self, url: &Iri) -> Result<JsonLdDocument, JsonLdLoadError> {
52 match self.get(url) {
53 Some(document) => Ok(document.clone()),
54 None => Err(JsonLdLoadError::new(url.to_owned(), EntryNotFound)),
55 }
56 }
57}
58
59impl AsyncJsonLdLoader for BTreeMap<IriBuf, JsonLdDocument> {
60 async fn async_load(&self, url: &Iri) -> Result<JsonLdDocument, JsonLdLoadError> {
61 match self.get(url) {
62 Some(document) => Ok(document.clone()),
63 None => Err(JsonLdLoadError::new(url.to_owned(), EntryNotFound)),
64 }
65 }
66}