use crate::geom::PointType;
use crate::grid::cell::CellID;
use crate::traffic_lights::signals::SignalType;
#[derive(Debug, Clone)]
pub struct TrafficLightGroup {
geometry: Vec<PointType>,
cells_ids: Vec<CellID>,
label: String,
signal: Vec<SignalType>,
id: i64,
}
impl TrafficLightGroup {
pub fn new(id: i64) -> TrafficLightGroupBuilder {
TrafficLightGroupBuilder {
group: TrafficLightGroup {
geometry: Vec::new(),
cells_ids: Vec::new(),
label: String::new(),
signal: Vec::new(),
id,
},
}
}
pub fn get_id(&self) -> i64 {
self.id
}
pub fn get_signal_at(&self, idx: usize) -> &SignalType {
&self.signal[idx]
}
pub fn get_cells_ids(&self) -> &Vec<CellID> {
&self.cells_ids
}
}
pub struct TrafficLightGroupBuilder {
group: TrafficLightGroup,
}
impl TrafficLightGroupBuilder {
pub fn with_label(mut self, label: String) -> Self {
self.group.label = label;
self
}
pub fn with_geometry(mut self, geometry: Vec<PointType>) -> Self {
self.group.geometry = geometry;
self
}
pub fn with_cells_ids(mut self, cells_ids: Vec<CellID>) -> Self {
self.group.cells_ids = cells_ids;
self
}
pub fn with_signal(mut self, signal: Vec<SignalType>) -> Self {
self.group.signal = signal;
self
}
pub fn build(self) -> TrafficLightGroup {
self.group
}
}