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
use ast::short::block::*;

#[derive(Copy, Debug, PartialEq, Eq, Clone)]
pub enum AdmonitionKind {
  Tip,
  Caution,
  Important,
  Note,
  Warning,
}

impl AdmonitionKind {
  pub fn lowercase_str(&self) -> &'static str {
    match self {
      AdmonitionKind::Tip => "tip",
      AdmonitionKind::Caution => "caution",
      AdmonitionKind::Important => "important",
      AdmonitionKind::Note => "note",
      AdmonitionKind::Warning => "warning",
    }
  }

  pub fn str(&self) -> &'static str {
    match self {
      AdmonitionKind::Tip => "Tip",
      AdmonitionKind::Caution => "Caution",
      AdmonitionKind::Important => "Important",
      AdmonitionKind::Note => "Note",
      AdmonitionKind::Warning => "Warning",
    }
  }
}

impl TryFrom<Context> for AdmonitionKind {
  type Error = &'static str;
  fn try_from(context: Context) -> Result<Self, Self::Error> {
    match context {
      Context::AdmonitionTip => Ok(AdmonitionKind::Tip),
      Context::AdmonitionCaution => Ok(AdmonitionKind::Caution),
      Context::AdmonitionImportant => Ok(AdmonitionKind::Important),
      Context::AdmonitionNote => Ok(AdmonitionKind::Note),
      Context::AdmonitionWarning => Ok(AdmonitionKind::Warning),
      _ => Err("not an admonition"),
    }
  }
}