1mod docs;
6mod obsidian;
7
8#[cfg(feature = "mcp")]
9pub mod mcp;
10
11pub use docs::{IndexEntry, RenderedAdr, markdown_to_html, render_adr, render_adr_index};
12pub use obsidian::{VaultNote, note_name, render_note};
13
14#[derive(Debug, Clone, Copy, PartialEq, Eq)]
16pub enum Target {
17 DocsSite,
19 ObsidianVault,
21}
22
23impl Target {
24 #[must_use]
26 pub fn as_str(self) -> &'static str {
27 match self {
28 Self::DocsSite => "docs",
29 Self::ObsidianVault => "obsidian",
30 }
31 }
32
33 #[must_use]
35 pub fn parse(s: &str) -> Option<Self> {
36 match s {
37 "docs" => Some(Self::DocsSite),
38 "obsidian" => Some(Self::ObsidianVault),
39 _ => None,
40 }
41 }
42}
43
44#[cfg(test)]
45mod tests {
46 use super::Target;
47
48 #[test]
49 fn target_names_are_stable() {
50 assert_eq!(Target::DocsSite.as_str(), "docs");
51 assert_eq!(Target::ObsidianVault.as_str(), "obsidian");
52 assert_eq!(Target::parse("docs"), Some(Target::DocsSite));
53 assert_eq!(Target::parse("obsidian"), Some(Target::ObsidianVault));
54 assert_eq!(Target::parse("nope"), None);
55 }
56}