use super::domain::Routes;
use crate::Result;
use crate::schema;
use crate::xml::{write_document, write_document_at};
use std::io::Write;
use std::path::Path;
pub fn write_routes(path: &Path, routes: &Routes) -> Result<()> {
write_document_at::<schema::RoutesType, _>(routes, "routes", "SUMO route file", path)
}
pub fn write_routes_to(routes: &Routes, sink: impl Write) -> Result<()> {
write_document::<schema::RoutesType, _, _>(routes, "routes", "SUMO route file", sink)
}
#[cfg(test)]
mod tests {
use super::*;
use crate::routes::domain::{Color, Depart, NamedColor, Route, RouteId, Vehicle, VehicleId};
use crate::routes::reader::read_routes_from;
fn sample_routes() -> Routes {
Routes {
vehicle_types: vec![],
routes: vec![Route {
id: RouteId("r0".into()),
edges: None,
color: Some(Color::Named(NamedColor::Grey)),
}],
vehicles: vec![Vehicle {
id: VehicleId("v0".into()),
vehicle_type: None,
route: Some(RouteId("r0".into())),
depart: Depart::Begin,
color: None,
}],
}
}
#[test]
fn writes_a_document_a_correctly_rooted_reader_accepts() {
let mut buf = Vec::new();
write_routes_to(&sample_routes(), &mut buf).unwrap();
let xml = String::from_utf8(buf).unwrap();
assert!(xml.starts_with("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"));
assert!(xml.contains("<routes"));
let read_back = read_routes_from(xml.as_bytes()).unwrap();
assert_eq!(read_back, sample_routes());
}
}