mdvault_core/scripting/
vault_context.rs1use std::path::PathBuf;
7use std::sync::Arc;
8
9use crate::captures::CaptureRepository;
10use crate::config::types::ResolvedConfig;
11use crate::index::IndexDb;
12use crate::macros::MacroRepository;
13use crate::templates::repository::TemplateRepository;
14use crate::types::TypeRegistry;
15
16#[derive(Clone, Debug)]
21pub struct CurrentNote {
22 pub path: String,
24 pub note_type: String,
26 pub title: Option<String>,
28 pub frontmatter: Option<serde_yaml::Value>,
30 pub content: String,
32}
33
34#[derive(Clone)]
39pub struct VaultContext {
40 pub config: Arc<ResolvedConfig>,
42 pub template_repo: Arc<TemplateRepository>,
44 pub capture_repo: Arc<CaptureRepository>,
46 pub macro_repo: Arc<MacroRepository>,
48 pub type_registry: Arc<TypeRegistry>,
50 pub index_db: Option<Arc<IndexDb>>,
52 pub current_note: Option<CurrentNote>,
54 pub vault_root: PathBuf,
56}
57
58impl VaultContext {
59 pub fn new(
61 config: ResolvedConfig,
62 template_repo: TemplateRepository,
63 capture_repo: CaptureRepository,
64 macro_repo: MacroRepository,
65 type_registry: TypeRegistry,
66 ) -> Self {
67 let vault_root = config.vault_root.clone();
68 Self {
69 config: Arc::new(config),
70 template_repo: Arc::new(template_repo),
71 capture_repo: Arc::new(capture_repo),
72 macro_repo: Arc::new(macro_repo),
73 type_registry: Arc::new(type_registry),
74 index_db: None,
75 current_note: None,
76 vault_root,
77 }
78 }
79
80 pub fn from_arcs(
82 config: Arc<ResolvedConfig>,
83 template_repo: Arc<TemplateRepository>,
84 capture_repo: Arc<CaptureRepository>,
85 macro_repo: Arc<MacroRepository>,
86 type_registry: Arc<TypeRegistry>,
87 ) -> Self {
88 let vault_root = config.vault_root.clone();
89 Self {
90 config,
91 template_repo,
92 capture_repo,
93 macro_repo,
94 type_registry,
95 index_db: None,
96 current_note: None,
97 vault_root,
98 }
99 }
100
101 pub fn with_index(mut self, index_db: Arc<IndexDb>) -> Self {
103 self.index_db = Some(index_db);
104 self
105 }
106
107 pub fn with_current_note(mut self, note: CurrentNote) -> Self {
109 self.current_note = Some(note);
110 self
111 }
112}