nostralink 0.2.1

Linked data library for nostr
Documentation
//! Helpers to build sparql substitutions

use super::vars as SPVars;
use crate::err::LDError;
use derive_builder::Builder;
use language::Language;
use nostr::EventId;
use oxigraph::model::*;

pub fn subl(
    varname: &str,
    literal: Literal,
) -> Result<(Variable, Term), LDError> {
    Ok((
        Variable::new(varname).map_err(|_| LDError::SubstitutionError)?,
        literal.into(),
    ))
}

pub fn subnn(
    varname: &str,
    nn: NamedNode,
) -> Result<(Variable, Term), LDError> {
    Ok((
        Variable::new(varname).map_err(|_| LDError::SubstitutionError)?,
        nn.into(),
    ))
}

#[derive(Builder, Debug)]
#[builder(default)]
pub struct Subs {
    #[builder(setter(strip_option))]
    event_id: Option<EventId>,
    #[builder(setter(strip_option))]
    lang: Option<Language>,
}

impl std::default::Default for Subs {
    fn default() -> Self {
        Self {
            event_id: None,
            lang: None,
        }
    }
}

impl Subs {
    pub fn subs(&self) -> Result<Vec<(Variable, Term)>, LDError> {
        let mut subs_v = Vec::new();
        if let Some(id) = self.event_id {
            subs_v.push(subl(SPVars::EVENT_ID, id.to_hex().into())?);
        }
        Ok(subs_v)
    }
}

#[test]
fn test_subs() -> Result<(), LDError> {
    let subs = SubsBuilder::default()
        .event_id(EventId::parse("5d35413cad64e6c4e9cd9788b1d82b935744a36582239d753cd4dadca045580a").unwrap())
        .lang(Language::EnGb)
        .build().map_err(|_| LDError::EventBuildError)?
        .subs()?;

    assert_eq!(subs.len(), 1);

    Ok(())
}