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(())
}