vos_core/schema/document/
mod.rs

1use 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}