mod lance_store;
pub use lance_store::LanceRelationsStore;
use anyhow::Result;
use async_trait::async_trait;
use crate::relations::types::{CallEdge, Definition, Reference};
#[async_trait]
pub trait RelationsStore: Send + Sync {
async fn store_definitions(
&self,
definitions: Vec<Definition>,
root_path: &str,
) -> Result<usize>;
async fn store_references(&self, references: Vec<Reference>, root_path: &str) -> Result<usize>;
async fn find_definition_at(
&self,
file_path: &str,
line: usize,
column: usize,
) -> Result<Option<Definition>>;
async fn find_definitions_by_name(&self, name: &str) -> Result<Vec<Definition>>;
async fn find_references(&self, target_symbol_id: &str) -> Result<Vec<Reference>>;
async fn get_callers(&self, symbol_id: &str) -> Result<Vec<CallEdge>>;
async fn get_callees(&self, symbol_id: &str) -> Result<Vec<CallEdge>>;
async fn delete_by_file(&self, file_path: &str) -> Result<usize>;
async fn clear(&self) -> Result<()>;
async fn get_stats(&self) -> Result<RelationsStats>;
}
#[derive(Debug, Clone, Default)]
pub struct RelationsStats {
pub definition_count: usize,
pub reference_count: usize,
pub files_with_definitions: usize,
}