diff --git a/src/netex_france/calendars.rs b/src/netex_france/calendars.rs index 643d872a0..b5aa7ca07 100644 --- a/src/netex_france/calendars.rs +++ b/src/netex_france/calendars.rs @@ -14,6 +14,20 @@ use crate::{objects::Calendar, Model, Result}; use minidom::Element; +use std::fmt::{self, Display, Formatter}; + +enum ObjectType { + DayType, +} + +impl Display for ObjectType { + fn fmt(&self, f: &mut Formatter) -> std::result::Result<(), fmt::Error> { + use ObjectType::*; + match self { + DayType => write!(f, "DayType"), + } + } +} pub struct CalendarExporter<'a> { model: &'a Model, @@ -25,7 +39,7 @@ impl<'a> CalendarExporter<'a> { CalendarExporter { model } } pub fn export(&self) -> Result> { - let _day_types_elements = self + let day_types_elements = self .model .calendars .values() @@ -43,9 +57,7 @@ impl<'a> CalendarExporter<'a> { .values() .map(|calendar| self.export_uic_operating_period(calendar)) .collect::>>()?; - let elements = Vec::new(); - // TODO: Uncomment below once implemented - // let mut elements = day_types_elements; + let elements = day_types_elements; // elements.extend(day_type_assignments_elements); // elements.extend(uic_operating_periods_elements); Ok(elements) @@ -54,9 +66,11 @@ impl<'a> CalendarExporter<'a> { // Internal methods impl<'a> CalendarExporter<'a> { - fn export_day_type(&self, _calendar: &'a Calendar) -> Result { - let day_type = Element::builder("DayType").build(); - Ok(day_type) + fn export_day_type(&self, calendar: &'a Calendar) -> Result { + let element_builder = Element::builder("DayType") + .attr("id", self.generate_id(&calendar.id, ObjectType::DayType)) + .attr("version", "any"); + Ok(element_builder.build()) } fn export_day_type_assignement(&self, _calendar: &'a Calendar) -> Result { @@ -68,4 +82,9 @@ impl<'a> CalendarExporter<'a> { let uic_operating_period = Element::builder("UicOperatingPeriod").build(); Ok(uic_operating_period) } + + fn generate_id(&self, id: &'a str, object_type: ObjectType) -> String { + let id = id.replace(':', "_"); + format!("FR:{}:{}:", object_type, id) + } } diff --git a/src/netex_france/exporter.rs b/src/netex_france/exporter.rs index 187567136..5a7b8a5b6 100644 --- a/src/netex_france/exporter.rs +++ b/src/netex_france/exporter.rs @@ -250,7 +250,7 @@ impl Exporter<'_> { fn create_calendars_frame(&self) -> Result { let calendar_exporter = CalendarExporter::new(&self.model); let calendars = calendar_exporter.export()?; - let _members = Self::create_members(calendars); + let members = Self::create_members(calendars); let general_frame_id = self.generate_frame_id( FrameType::General, &format!("NETEX_{}", VersionType::Calendars), @@ -258,8 +258,7 @@ impl Exporter<'_> { let frame = Element::builder(FrameType::General.to_string()) .attr("id", general_frame_id) .attr("version", "any") - // TODO: Uncomment once some members are created - // .append(members) + .append(members) .build(); Ok(frame) } diff --git a/tests/fixtures/netex_france/calendriers.xml b/tests/fixtures/netex_france/calendriers.xml index ecc973590..90e4efd5c 100644 --- a/tests/fixtures/netex_france/calendriers.xml +++ b/tests/fixtures/netex_france/calendriers.xml @@ -4,6 +4,10 @@ Participant + + + +