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