1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
use std::collections::HashSet; use std::fmt::Debug; use serde::{Deserialize, Serialize}; use uuid; use uuid::Uuid; use yew::Html; #[derive(Serialize, Deserialize, Debug)] pub enum AccessLevel { PUBLIC, NSFW, NSFL, CREDENTIALS, APOCALYPTIC, } #[derive(Serialize, Deserialize, Debug)] pub struct Props { uuid: Uuid, votes: i64, access: AccessLevel, } pub trait Search { fn indexable_content(&self) -> String; fn title(&self) -> String; } pub trait Relation { fn parents(&self) -> HashSet<Uuid>; fn children(&self) -> HashSet<Uuid>; fn sources(&self) -> HashSet<Uuid>; } pub trait Render { fn render(&self) -> Html; } pub trait Edit { fn editor(&self) -> Html; } #[typetag::serde(tag = "type")] pub trait Note: Search + Relation + Render + Edit + Debug { fn props(&self) -> &Props; } #[typetag::serde(tag = "type")] pub trait Resource: Search + Relation + Render + Debug { fn props(&self) -> &Props; fn url(&self) -> String; fn mime(&self) -> String; }