vos_core/schema/document/
mod.rs1use super::*;
2
3#[derive(Clone, Debug, Default, Serialize, Deserialize)]
4pub struct Document {
5 pub kind: DocumentKind,
6 pub text: String,
7}
8
9#[derive(Clone, Debug, Serialize, Deserialize)]
10pub enum DocumentKind {
11 GFM,
12}
13
14impl Default for DocumentKind {
15 fn default() -> Self {
16 Self::GFM
17 }
18}
19
20impl Display for Document {
21 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
22 for line in self.text.lines() {
23 writeln!(f, "/// {}", line)?
24 }
25 Ok(())
26 }
27}
28
29impl Document {
30 pub fn markdown(text: impl Into<String>) -> Self {
31 Self { kind: DocumentKind::GFM, text: text.into() }
32 }
33 pub fn push(&mut self, document: &str) {
34 if document.trim().is_empty() {
35 return;
36 }
37 if !self.text.is_empty() {
38 self.text.push('\n')
39 }
40 self.text.push_str(document);
41 }
42}