use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Node {
pub id: i64,
pub lat: f64,
pub lon: f64,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum PickupSide {
Left,
Right,
Either,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Edge {
pub from: i64,
pub to: i64,
pub cost: f64,
pub oneway: bool,
pub side: PickupSide,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EulerianCircuit {
pub nodes: Vec<i64>,
pub edges: Vec<Edge>,
pub total_cost: f64,
pub augmenting_edges: usize,
}
impl Node {
pub fn new(id: i64, lat: f64, lon: f64) -> Self {
Self { id, lat, lon }
}
}
impl Edge {
pub fn new(from: i64, to: i64, cost: f64, oneway: bool, side: PickupSide) -> Self {
Self {
from,
to,
cost,
oneway,
side,
}
}
}