use super::traversal_model_error::TraversalModelError;
use crate::model::network::{Edge, Vertex};
use crate::model::state::StateModel;
use crate::model::state::StateVariable;
use crate::model::state::{InputFeature, OutputFeature};
pub trait TraversalModel: Send + Sync {
fn input_features(&self) -> Vec<(String, InputFeature)>;
fn output_features(&self) -> Vec<(String, OutputFeature)>;
fn traverse_edge(
&self,
trajectory: (&Vertex, &Edge, &Vertex),
state: &mut Vec<StateVariable>,
state_model: &StateModel,
) -> Result<(), TraversalModelError>;
fn estimate_traversal(
&self,
od: (&Vertex, &Vertex),
state: &mut Vec<StateVariable>,
state_model: &StateModel,
) -> Result<(), TraversalModelError>;
}