use super::state::state_variable::StateVar;
use super::traversal_model_error::TraversalModelError;
use crate::model::property::{edge::Edge, vertex::Vertex};
use crate::model::state::state_feature::StateFeature;
use crate::model::state::state_model::StateModel;
pub trait TraversalModel: Send + Sync {
fn state_features(&self) -> Vec<(String, StateFeature)>;
fn traverse_edge(
&self,
trajectory: (&Vertex, &Edge, &Vertex),
state: &mut Vec<StateVar>,
state_model: &StateModel,
) -> Result<(), TraversalModelError>;
fn estimate_traversal(
&self,
od: (&Vertex, &Vertex),
state: &mut Vec<StateVar>,
state_model: &StateModel,
) -> Result<(), TraversalModelError>;
}