use serde::{Deserialize, Serialize};
use super::{Aside, Author, MessageId};
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct Note {
pub title: String,
pub text: String,
}
impl Note {
pub const KIND: &'static str = "note";
pub fn new(title: impl Into<String>, text: impl Into<String>) -> Self {
Self {
title: title.into(),
text: text.into(),
}
}
pub fn aside(self, author: Author, after: Option<MessageId>) -> Aside {
let value = serde_json::json!({ "title": self.title, "text": self.text });
Aside::new(Self::KIND, author, value).after(after)
}
pub fn of(aside: &Aside) -> Option<Self> {
if aside.kind != Self::KIND {
return None;
}
Self::deserialize(&aside.value).ok()
}
}