use crate::gmns::types::*;
#[derive(Debug, Clone)]
pub struct Node {
pub id: NodeID,
pub macro_node_id: NodeID,
pub macro_link_id: LinkID,
pub zone_id: ZoneID,
pub control_type: ControlType,
pub boundary_type: BoundaryType,
pub longitude: f64,
pub latitude: f64,
pub incoming_links: Vec<LinkID>,
pub outcoming_links: Vec<LinkID>,
}
impl Node {
pub fn new(id: NodeID) -> NodeBuilder {
NodeBuilder {
instance: Node {
id,
macro_node_id: -1,
macro_link_id: -1,
zone_id: -1,
control_type: ControlType::NotSignal,
boundary_type: BoundaryType::None,
longitude: 0.0,
latitude: 0.0,
incoming_links: Vec::new(),
outcoming_links: Vec::new(),
},
}
}
}
pub struct NodeBuilder {
instance: Node,
}
impl NodeBuilder {
pub fn with_macro_node_id(mut self, macro_node_id: NodeID) -> Self {
self.instance.macro_node_id = macro_node_id;
self
}
pub fn with_macro_link_id(mut self, macro_link_id: LinkID) -> Self {
self.instance.macro_link_id = macro_link_id;
self
}
pub fn with_zone_id(mut self, zone_id: ZoneID) -> Self {
self.instance.zone_id = zone_id;
self
}
pub fn with_control_type(mut self, control_type: ControlType) -> Self {
self.instance.control_type = control_type;
self
}
pub fn with_boundary_type(mut self, boundary_type: BoundaryType) -> Self {
self.instance.boundary_type = boundary_type;
self
}
pub fn with_coordinates(mut self, latitude: f64, longitude: f64) -> Self {
self.instance.latitude = latitude;
self.instance.longitude = longitude;
self
}
pub fn build(self) -> Node {
self.instance
}
}