1mod docs;
6mod obsidian;
7
8#[cfg(feature = "mcp")]
9pub mod mcp;
10
11pub use docs::{
12 IndexEntry, NavEntry, PublishedPages, RenderedAdr, SourceBase, markdown_to_html, render_adr,
13 render_adr_index, render_doc, render_nav, render_site_page, replace_site_nav,
14};
15pub use obsidian::{
16 AdrEntry, ConfigSecretSummary, CouplingEntry, Coverage, CrossLink, DensityEntry, FindingEntry,
17 HOME_NOTE, MemberPin, RenderedUnder, VaultNote, VaultScope, VaultSummary, WorkspaceSummary,
18 note_name, render_home, render_note, render_note_scoped, render_workspace_home,
19 scoped_note_name,
20};
21
22#[derive(Debug, Clone, Copy, PartialEq, Eq)]
24pub enum Target {
25 DocsSite,
27 ObsidianVault,
29}
30
31impl Target {
32 #[must_use]
34 pub fn as_str(self) -> &'static str {
35 match self {
36 Self::DocsSite => "docs",
37 Self::ObsidianVault => "obsidian",
38 }
39 }
40
41 #[must_use]
43 pub fn parse(s: &str) -> Option<Self> {
44 match s {
45 "docs" => Some(Self::DocsSite),
46 "obsidian" => Some(Self::ObsidianVault),
47 _ => None,
48 }
49 }
50}
51
52#[cfg(test)]
53mod tests {
54 use super::Target;
55
56 #[test]
57 fn target_names_are_stable() {
58 assert_eq!(Target::DocsSite.as_str(), "docs");
59 assert_eq!(Target::ObsidianVault.as_str(), "obsidian");
60 assert_eq!(Target::parse("docs"), Some(Target::DocsSite));
61 assert_eq!(Target::parse("obsidian"), Some(Target::ObsidianVault));
62 assert_eq!(Target::parse("nope"), None);
63 }
64}