use rdf_syntax::{Iri, IriBuf};
use std::{
collections::{BTreeMap, HashMap},
sync::LazyLock,
};
use crate::{JsonLdDocument, JsonLdLoadError};
use super::{AsyncJsonLdLoader, JsonLdLoader};
pub type StaticJsonLdLoader = LazyLock<HashMap<IriBuf, JsonLdDocument>>;
#[derive(Debug, thiserror::Error)]
#[error("document not found")]
pub struct EntryNotFound;
impl JsonLdLoader for HashMap<IriBuf, JsonLdDocument> {
fn load(&self, url: &Iri) -> Result<JsonLdDocument, JsonLdLoadError> {
match self.get(url) {
Some(document) => Ok(document.clone()),
None => Err(JsonLdLoadError::new(url.to_owned(), EntryNotFound)),
}
}
}
impl AsyncJsonLdLoader for HashMap<IriBuf, JsonLdDocument> {
async fn async_load(&self, url: &Iri) -> Result<JsonLdDocument, JsonLdLoadError> {
match self.get(url) {
Some(document) => Ok(document.clone()),
None => Err(JsonLdLoadError::new(url.to_owned(), EntryNotFound)),
}
}
}
impl JsonLdLoader for BTreeMap<IriBuf, JsonLdDocument> {
fn load(&self, url: &Iri) -> Result<JsonLdDocument, JsonLdLoadError> {
match self.get(url) {
Some(document) => Ok(document.clone()),
None => Err(JsonLdLoadError::new(url.to_owned(), EntryNotFound)),
}
}
}
impl AsyncJsonLdLoader for BTreeMap<IriBuf, JsonLdDocument> {
async fn async_load(&self, url: &Iri) -> Result<JsonLdDocument, JsonLdLoadError> {
match self.get(url) {
Some(document) => Ok(document.clone()),
None => Err(JsonLdLoadError::new(url.to_owned(), EntryNotFound)),
}
}
}