use super::error::TraversalModelError;
use crate::algorithm::search::SearchTree;
use crate::model::network::Vertex;
use crate::model::state::{InputFeature, StateModel, StateVariable, StateVariableConfig};
use crate::model::traversal::EdgeFrontierContext;
pub trait TraversalModel: Send + Sync {
fn name(&self) -> String;
fn input_features(&self) -> Vec<InputFeature>;
fn output_features(&self) -> Vec<(String, StateVariableConfig)>;
fn traverse_edge(
&self,
ctx: &EdgeFrontierContext,
state: &mut Vec<StateVariable>,
state_model: &StateModel,
) -> Result<(), TraversalModelError>;
fn estimate_traversal(
&self,
od: (&Vertex, &Vertex),
state: &mut Vec<StateVariable>,
tree: &SearchTree,
state_model: &StateModel,
) -> Result<(), TraversalModelError>;
}