pub mod graphml;
pub mod json;
pub mod memory;
pub mod sqlite;
use crate::{schema::EdgeType, Edge, Node};
pub trait GraphBackend {
type Error: std::error::Error + Send + Sync + 'static;
fn init(&mut self) -> Result<(), Self::Error>;
fn write_nodes(&mut self, nodes: &[Node]) -> Result<(), Self::Error>;
fn write_edges(&mut self, edges: &[Edge]) -> Result<(), Self::Error>;
fn read_nodes(&self) -> Result<Vec<Node>, Self::Error>;
fn read_edges(&self) -> Result<Vec<Edge>, Self::Error>;
fn find_nodes_by_type(&self, kind: crate::schema::NodeType) -> Result<Vec<Node>, Self::Error>;
fn neighbors(
&self,
node_id: &str,
edge_type: Option<EdgeType>,
) -> Result<Vec<Edge>, Self::Error>;
fn clear(&mut self) -> Result<(), Self::Error>;
}