1use anyhow::Result;
2use async_trait::async_trait;
3
4use chrono::{DateTime, Utc};
5
6use crate::model::{
7 CommitContext, DocumentContext, Reference, SearchParams, SearchResults, Timeline,
8};
9
10#[async_trait]
15pub trait KnowledgeStore: Send + Sync {
16 async fn search(&self, params: SearchParams) -> Result<SearchResults>;
18
19 async fn get_document(&self, id: &str) -> Result<Option<DocumentContext>>;
21
22 async fn get_references(
24 &self, entity: &str, ref_type: Option<&str>, limit: u32,
25 ) -> Result<Vec<Reference>>;
26
27 async fn lookup_bip(&self, number: u32) -> Result<Option<DocumentContext>>;
30
31 async fn lookup_bolt(&self, number: u32) -> Result<Option<DocumentContext>>;
34
35 async fn lookup_blip(&self, number: u32) -> Result<Option<DocumentContext>>;
38
39 async fn lookup_lud(&self, number: u32) -> Result<Option<DocumentContext>>;
42
43 async fn lookup_nut(&self, number: u32) -> Result<Option<DocumentContext>>;
46
47 async fn timeline(
49 &self, concept: &str, after: Option<DateTime<Utc>>, before: Option<DateTime<Utc>>,
50 ) -> Result<Timeline>;
51
52 async fn find_commit(&self, query: &str, repo: Option<&str>) -> Result<Vec<CommitContext>>;
54}