use crate::core::error::Result;
use crate::core::graph::{Edge, Node};
use crate::core::id::{EdgeId, NodeId};
use crate::core::temporal::Timestamp;
pub trait GraphView {
fn get_node(&self, id: NodeId) -> Result<Node>;
fn get_edge(&self, id: EdgeId) -> Result<Edge>;
fn get_edge_target(&self, edge_id: EdgeId) -> Result<NodeId>;
fn get_edge_source(&self, edge_id: EdgeId) -> Result<NodeId>;
fn get_outgoing_edges(&self, node_id: NodeId) -> Vec<EdgeId>;
fn get_incoming_edges(&self, node_id: NodeId) -> Vec<EdgeId>;
fn get_outgoing_edges_with_label(&self, node_id: NodeId, label: &str) -> Vec<EdgeId>;
fn get_node_at_time(
&self,
node_id: NodeId,
valid_time: Timestamp,
transaction_time: Timestamp,
) -> Result<Node>;
fn get_edge_at_time(
&self,
edge_id: EdgeId,
valid_time: Timestamp,
transaction_time: Timestamp,
) -> Result<Edge>;
fn get_outgoing_edges_at_time(
&self,
source: NodeId,
valid_time: Timestamp,
tx_time: Timestamp,
) -> Vec<EdgeId>;
fn get_incoming_edges_at_time(
&self,
target: NodeId,
valid_time: Timestamp,
tx_time: Timestamp,
) -> Vec<EdgeId>;
fn find_similar_as_of(
&self,
embedding: &[f32],
k: usize,
timestamp: Timestamp,
) -> Result<Vec<(NodeId, f32)>>;
}