use language::Language;
use serde::de::Deserializer;
use serde::ser::{Serialize, SerializeStruct, Serializer};
use serde::Deserialize;
use serde_json::{json, Value};
#[derive(Debug, Clone)]
pub struct LanguageJLD(pub Language);
impl Serialize for LanguageJLD {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
let mut state = serializer.serialize_struct("Language", 5)?;
state.serialize_field("@id", &lang_iri(self.0))?;
state.serialize_field("@type", &"Language")?;
state.serialize_field("@context", &"https://schema.org")?;
state.serialize_field("name", &self.0.as_str())?;
state.serialize_field("alternateName", &self.0.as_tag())?;
state.end()
}
}
impl<'de> Deserialize<'de> for LanguageJLD {
fn deserialize<D>(_deserializer: D) -> Result<Self, D::Error>
where
D: Deserializer<'de>,
{
Ok(LanguageJLD(Language::EnGb))
}
}
pub fn lang_iri(lang: Language) -> String {
format!("urn:nostr-lang:{}", lang.as_tag()).to_string()
}
pub fn lang_jsonld(lang: Language) -> Value {
json!({
"@id": lang_iri(lang),
"@type": "Language",
"name": lang.as_str().to_owned(),
"alternateName": lang.as_tag().to_owned(),
})
}