use async_trait::async_trait;
use crate::types::{
Direction, EdgeExpansion, GraphNode, GraphPayload, GraphSchema, GraphStats, SearchHits,
};
#[async_trait]
pub trait GraphProvider: Send + Sync {
async fn overview(&self, realm: Option<&str>, limit: usize) -> anyhow::Result<GraphPayload>;
async fn node(&self, id: &str) -> anyhow::Result<Option<GraphNode>>;
async fn neighbors(
&self,
ids: &[String],
dir: Direction,
only_internal: bool,
limit: usize,
) -> anyhow::Result<EdgeExpansion>;
async fn subgraph(&self, id: &str, depth: usize) -> anyhow::Result<GraphPayload>;
async fn search(
&self,
text: &str,
labels: &[String],
realm: Option<&str>,
limit: usize,
offset: usize,
) -> anyhow::Result<SearchHits>;
async fn stats(&self, realm: Option<&str>) -> anyhow::Result<GraphStats>;
async fn schema(&self) -> anyhow::Result<GraphSchema>;
}