pub mod jsonld_serde;
#[allow(non_snake_case)]
pub mod nostralink;
pub mod schema_org;
pub use nostralink::*;
pub use schema_org::media::{ImageObject, VideoObject};
use crate::ldevents::jsonld_event_builder;
use nostr::EventBuilder;
use serde_json::Value;
#[allow(unused_imports)]
use strum::IntoEnumIterator;
use strum_macros::EnumIter;
#[enum_delegate::register]
pub trait NostraObject {
fn value(&mut self) -> Result<Value, serde_json::Error>;
fn otype(&self) -> NObject {
NObject::SocialPost
}
fn name(&self, _lang_tag: &str) -> Option<String> {
None
}
fn description(&self, _lang_tag: &str) -> Option<String> {
None
}
fn event_builder(&mut self) -> Result<EventBuilder, serde_json::Error> {
Ok(jsonld_event_builder(self.value()?, None))
}
}
#[derive(EnumIter, Debug)]
pub enum NObject {
SocialPost,
Post,
Article,
EventReaction,
VideoObject,
Note,
Meme,
MemesCollection,
}
impl NObject {
pub fn to_string(&self) -> String {
match self {
NObject::SocialPost => "Post".to_string(),
NObject::Article => "Article".to_string(),
NObject::VideoObject => "Video".to_string(),
_ => "".to_string(),
}
}
pub fn description(&self) -> String {
match self {
_ => "".to_string(),
}
}
}
#[enum_delegate::implement(NostraObject)]
#[derive(EnumIter, Debug)]
pub enum NostraCatalog {
Post(Post),
Note(Note),
Meme(Meme),
MemesCollection(MemesCollection),
}
#[test]
fn objt_iter() {
for otype in NostraCatalog::iter() {
println!("Name: {:?}", otype.name("en"));
println!("Nom: {:?}", otype.name("fr"));
println!("descr en: {:?}", otype.description("en"));
println!("descr fr: {:?}", otype.description("fr"));
}
}