diff --git a/examples/gtfs_reader.rs b/examples/gtfs_reader.rs index 3e4f3c50f..a117f9e21 100644 --- a/examples/gtfs_reader.rs +++ b/examples/gtfs_reader.rs @@ -13,18 +13,23 @@ // along with this program. If not, see use serde_json::json; -use std::path::Path; -use transit_model::Result; +use std::collections::BTreeMap; +use transit_model::{ + gtfs, + objects::{Contributor, Dataset}, + Result, +}; fn run() -> Result<()> { - let configuration: transit_model::gtfs::Configuration<&Path> = - transit_model::gtfs::Configuration { - config_path: None, - prefix: None, - on_demand_transport: false, - on_demand_transport_comment: None, - }; - let objects = transit_model::gtfs::read_from_path(".", configuration)?; + let configuration: gtfs::Configuration = gtfs::Configuration { + contributor: Contributor::default(), + dataset: Dataset::default(), + feed_infos: BTreeMap::new(), + prefix_conf: None, + on_demand_transport: false, + on_demand_transport_comment: None, + }; + let objects = gtfs::read_from_path(".", configuration)?; let json_objs = json!(objects); println!("{:?}", json_objs.to_string()); Ok(()) diff --git a/gtfs2netexfr/src/main.rs b/gtfs2netexfr/src/main.rs index b3fce24ca..984907529 100644 --- a/gtfs2netexfr/src/main.rs +++ b/gtfs2netexfr/src/main.rs @@ -21,7 +21,7 @@ use slog::{slog_o, Drain}; use slog_async::OverflowStrategy; use std::path::PathBuf; use structopt::StructOpt; -use transit_model::Result; +use transit_model::{read_utils, Result}; #[derive(Debug, StructOpt)] #[structopt(name = "gtfs2netexfr", about = "Convert a GTFS to NeTEx France.")] @@ -96,9 +96,12 @@ fn init_logger() -> slog_scope::GlobalLoggerGuard { fn run(opt: Opt) -> Result<()> { info!("Launching gtfs2netexfr..."); + let (contributor, dataset, feed_infos) = read_utils::read_config(opt.config)?; let configuration = transit_model::gtfs::Configuration { - config_path: opt.config, - prefix: None, + contributor, + dataset, + feed_infos, + prefix_conf: None, on_demand_transport: opt.odt, on_demand_transport_comment: opt.odt_comment, }; diff --git a/gtfs2ntfs/src/main.rs b/gtfs2ntfs/src/main.rs index f10c7faaf..dea8799cc 100644 --- a/gtfs2ntfs/src/main.rs +++ b/gtfs2ntfs/src/main.rs @@ -21,7 +21,7 @@ use slog::{slog_o, Drain}; use slog_async::OverflowStrategy; use std::path::PathBuf; use structopt::StructOpt; -use transit_model::{transfers::generates_transfers, Result}; +use transit_model::{read_utils, transfers::generates_transfers, PrefixConfiguration, Result}; #[derive(Debug, StructOpt)] #[structopt(name = "gtfs2ntfs", about = "Convert a GTFS to an NTFS.")] @@ -99,9 +99,17 @@ fn init_logger() -> slog_scope::GlobalLoggerGuard { fn run(opt: Opt) -> Result<()> { info!("Launching gtfs2ntfs..."); + let (contributor, dataset, feed_infos) = read_utils::read_config(opt.config)?; + let mut prefix_conf = PrefixConfiguration::default(); + if let Some(data_prefix) = opt.prefix { + prefix_conf.set_data_prefix(data_prefix); + } + prefix_conf.set_dataset_id(&dataset.id); let configuration = transit_model::gtfs::Configuration { - config_path: opt.config, - prefix: opt.prefix, + contributor, + dataset, + feed_infos, + prefix_conf: Some(prefix_conf), on_demand_transport: opt.odt, on_demand_transport_comment: opt.odt_comment, }; diff --git a/src/gtfs/mod.rs b/src/gtfs/mod.rs index a3455b9cf..f80b8424c 100644 --- a/src/gtfs/mod.rs +++ b/src/gtfs/mod.rs @@ -21,8 +21,7 @@ use crate::{ calendars::{manage_calendars, write_calendar_dates}, gtfs::read::EquipmentList, model::{Collections, Model}, - objects, - objects::{Availability, StopPoint, StopType, Time}, + objects::{self, Availability, Contributor, Dataset, StopPoint, StopType, Time}, read_utils, utils::*, validity_period, AddPrefix, PrefixConfiguration, Result, @@ -30,8 +29,7 @@ use crate::{ use derivative::Derivative; use log::info; use serde::{Deserialize, Serialize}; -use std::fmt; -use std::path::Path; +use std::{collections::BTreeMap, fmt, path::Path}; use typed_index_collection::{CollectionWithId, Idx}; #[derive(Serialize, Deserialize, Debug, Clone, PartialEq)] @@ -257,33 +255,42 @@ struct Shape { } ///parameters consolidation -#[derive(Clone)] -pub struct Configuration> { - /// path to configuration file - pub config_path: Option

, +pub struct Configuration { + /// The Contributor providing the Dataset + pub contributor: Contributor, + /// Describe the Dataset being parsed + pub dataset: Dataset, + /// Additional key-values for the 'feed_infos.txt' + pub feed_infos: BTreeMap, /// used to prefix objects - pub prefix: Option, + pub prefix_conf: Option, /// stop time precision management pub on_demand_transport: bool, /// on demand transport comment template pub on_demand_transport_comment: Option, } -fn read>(file_handler: &mut H, configuration: Configuration

) -> Result +fn read(file_handler: &mut H, configuration: Configuration) -> Result where for<'a> &'a mut H: read_utils::FileHandler, { let mut collections = Collections::default(); let mut equipments = EquipmentList::default(); - manage_calendars(file_handler, &mut collections)?; + let Configuration { + contributor, + mut dataset, + feed_infos, + prefix_conf, + on_demand_transport, + on_demand_transport_comment, + } = configuration; - let (contributor, mut dataset, feed_infos) = - read_utils::read_config(configuration.config_path)?; + manage_calendars(file_handler, &mut collections)?; validity_period::compute_dataset_validity_period(&mut dataset, &collections.calendars)?; - collections.contributors = CollectionWithId::new(vec![contributor])?; - collections.datasets = CollectionWithId::new(vec![dataset])?; + collections.contributors = CollectionWithId::from(contributor); + collections.datasets = CollectionWithId::from(dataset); collections.feed_infos = feed_infos; let (networks, companies) = read::read_agency(file_handler)?; @@ -303,17 +310,15 @@ where read::manage_stop_times( &mut collections, file_handler, - configuration.on_demand_transport, - configuration.on_demand_transport_comment, + on_demand_transport, + on_demand_transport_comment, )?; read::manage_frequencies(&mut collections, file_handler)?; read::manage_pathways(&mut collections, file_handler)?; collections.levels = read_utils::read_opt_collection(file_handler, "levels.txt")?; //add prefixes - if let Some(prefix) = configuration.prefix { - let mut prefix_conf = PrefixConfiguration::default(); - prefix_conf.set_data_prefix(prefix); + if let Some(prefix_conf) = prefix_conf { collections.prefix(&prefix_conf); } @@ -331,10 +336,7 @@ where /// The `prefix` argument is a string that will be prepended to every /// identifiers, allowing to namespace the dataset. By default, no /// prefix will be added to the identifiers. -pub fn read_from_path>( - p: P, - configuration: Configuration>, -) -> Result { +pub fn read_from_path>(p: P, configuration: Configuration) -> Result { let mut file_handle = read_utils::PathFileHandler::new(p.as_ref().to_path_buf()); read(&mut file_handle, configuration) } @@ -349,10 +351,7 @@ pub fn read_from_path>( /// The `prefix` argument is a string that will be prepended to every /// identifiers, allowing to namespace the dataset. By default, no /// prefix will be added to the identifiers. -pub fn read_from_zip>( - path: P, - configuration: Configuration>, -) -> Result { +pub fn read_from_zip>(path: P, configuration: Configuration) -> Result { let mut file_handler = read_utils::ZipHandler::new(path)?; read(&mut file_handler, configuration) } diff --git a/tests/fixtures/gtfs2ntfs/full_output/calendar.txt b/tests/fixtures/gtfs2ntfs/full_output/calendar.txt index 80f8ebfde..03dd5aa87 100644 --- a/tests/fixtures/gtfs2ntfs/full_output/calendar.txt +++ b/tests/fixtures/gtfs2ntfs/full_output/calendar.txt @@ -1,4 +1,4 @@ service_id,monday,tuesday,wednesday,thursday,friday,saturday,sunday,start_date,end_date -ME:service:1,1,1,1,0,0,0,0,20180101,20180103 -ME:service:2,0,0,0,0,1,1,0,20180105,20180106 -ME:service:2:+1days,0,0,0,0,0,1,1,20180106,20180107 +ME:Defaul:service:1,1,1,1,0,0,0,0,20180101,20180103 +ME:Defaul:service:2,0,0,0,0,1,1,0,20180105,20180106 +ME:Defaul:service:2:+1days,0,0,0,0,0,1,1,20180106,20180107 diff --git a/tests/fixtures/gtfs2ntfs/full_output/comment_links.txt b/tests/fixtures/gtfs2ntfs/full_output/comment_links.txt index e85977310..43c5ef1a3 100644 --- a/tests/fixtures/gtfs2ntfs/full_output/comment_links.txt +++ b/tests/fixtures/gtfs2ntfs/full_output/comment_links.txt @@ -1,3 +1,3 @@ object_id,object_type,comment_id -ME:stoparea:1,stop_area,ME:stop:stoparea:1 -ME:stop:11,stop_point,ME:stop:stop:11 +ME:stoparea:1,stop_area,ME:Defaul:stop:stoparea:1 +ME:stop:11,stop_point,ME:Defaul:stop:stop:11 diff --git a/tests/fixtures/gtfs2ntfs/full_output/comments.txt b/tests/fixtures/gtfs2ntfs/full_output/comments.txt index a1d48bab6..812c5b461 100644 --- a/tests/fixtures/gtfs2ntfs/full_output/comments.txt +++ b/tests/fixtures/gtfs2ntfs/full_output/comments.txt @@ -1,3 +1,3 @@ comment_id,comment_type,comment_label,comment_name,comment_url -ME:stop:stoparea:1,information,,stoparea:1_comment, -ME:stop:stop:11,information,,stop:11_comment, +ME:Defaul:stop:stoparea:1,information,,stoparea:1_comment, +ME:Defaul:stop:stop:11,information,,stop:11_comment, diff --git a/tests/fixtures/gtfs2ntfs/full_output/object_codes.txt b/tests/fixtures/gtfs2ntfs/full_output/object_codes.txt index 05cc22fd5..47184ee91 100644 --- a/tests/fixtures/gtfs2ntfs/full_output/object_codes.txt +++ b/tests/fixtures/gtfs2ntfs/full_output/object_codes.txt @@ -11,12 +11,12 @@ stop_point,ME:stop:53,source,stop:53 stop_point,ME:stop:61,source,stop:61 network,ME:1,source,1 network,ME:2,source,2 -trip,ME:trip:3-0,source,trip:3 -trip,ME:trip:4-0,source,trip:4 -trip,ME:trip:4-1,source,trip:4 -trip,ME:trip:4-2,source,trip:4 -trip,ME:trip:4-3,source,trip:4 -trip,ME:trip:5-0,source,trip:5 -trip,ME:trip:5-1,source,trip:5 -trip,ME:trip:5-2,source,trip:5 -trip,ME:trip:6,source,trip:6 +trip,ME:Defaul:trip:3-0,source,trip:3 +trip,ME:Defaul:trip:4-0,source,trip:4 +trip,ME:Defaul:trip:4-1,source,trip:4 +trip,ME:Defaul:trip:4-2,source,trip:4 +trip,ME:Defaul:trip:4-3,source,trip:4 +trip,ME:Defaul:trip:5-0,source,trip:5 +trip,ME:Defaul:trip:5-1,source,trip:5 +trip,ME:Defaul:trip:5-2,source,trip:5 +trip,ME:Defaul:trip:6,source,trip:6 diff --git a/tests/fixtures/gtfs2ntfs/full_output/stop_times.txt b/tests/fixtures/gtfs2ntfs/full_output/stop_times.txt index c38f39cf2..953f77c18 100644 --- a/tests/fixtures/gtfs2ntfs/full_output/stop_times.txt +++ b/tests/fixtures/gtfs2ntfs/full_output/stop_times.txt @@ -1,27 +1,27 @@ stop_id,trip_id,stop_sequence,arrival_time,departure_time,boarding_duration,alighting_duration,pickup_type,drop_off_type,datetime_estimated,local_zone_id,stop_headsign,stop_time_id,stop_time_precision -ME:stop:11,ME:trip:4-0,0,20:00:00,20:00:00,0,0,2,0,1,,,,0 -ME:stop:11,ME:trip:4-1,0,20:30:00,20:30:00,0,0,2,0,1,,,,0 -ME:stop:11,ME:trip:4-2,0,21:00:00,21:00:00,0,0,2,0,1,,,,0 -ME:stop:11,ME:trip:4-3,0,21:30:00,21:30:00,0,0,2,0,1,,,,0 -ME:stop:22,ME:trip:4-0,1,20:09:00,20:09:00,0,0,2,0,1,,,,0 -ME:stop:22,ME:trip:4-1,1,20:39:00,20:39:00,0,0,2,0,1,,,,0 -ME:stop:22,ME:trip:4-2,1,21:09:00,21:09:00,0,0,2,0,1,,,,0 -ME:stop:22,ME:trip:4-3,1,21:39:00,21:39:00,0,0,2,0,1,,,,0 -ME:stop:31,ME:trip:3-0,0,10:00:00,10:00:00,0,0,0,0,0,,,,0 -ME:stop:32,ME:trip:3-0,1,10:13:00,10:15:00,0,0,0,0,0,,,,0 -ME:stop:33,ME:trip:3-0,2,10:20:00,10:25:00,0,0,0,0,0,,,,0 -ME:stop:33,ME:trip:4-0,2,20:17:00,20:19:00,0,0,2,0,1,,,,0 -ME:stop:33,ME:trip:4-1,2,20:47:00,20:49:00,0,0,2,0,1,,,,0 -ME:stop:33,ME:trip:4-2,2,21:17:00,21:19:00,0,0,2,0,1,,,,0 -ME:stop:33,ME:trip:4-3,2,21:47:00,21:49:00,0,0,2,0,1,,,,0 -ME:stop:51,ME:trip:5-0,0,23:00:00,23:00:00,0,0,2,0,0,,,,0 -ME:stop:51,ME:trip:5-1,0,23:50:00,23:50:00,0,0,2,0,0,,,,0 -ME:stop:51,ME:trip:5-2,0,00:40:00,00:40:00,0,0,2,0,0,,,,0 -ME:stop:52,ME:trip:5-0,1,23:47:00,23:47:00,0,0,2,0,0,,,,0 -ME:stop:52,ME:trip:5-1,1,24:37:00,24:37:00,0,0,2,0,0,,,,0 -ME:stop:52,ME:trip:5-2,1,01:27:00,01:27:00,0,0,2,0,0,,,,0 -ME:stop:53,ME:trip:5-0,2,24:17:00,24:17:00,0,0,0,2,0,,,,0 -ME:stop:53,ME:trip:5-1,2,25:07:00,25:07:00,0,0,0,2,0,,,,0 -ME:stop:53,ME:trip:5-2,2,01:57:00,01:57:00,0,0,0,2,0,,,,0 -ME:stop:61,ME:trip:6,0,14:40:00,14:40:00,0,0,2,0,0,,,,0 -ME:stop:61,ME:trip:6,1,15:20:00,15:20:00,0,0,2,0,0,,,,0 +ME:stop:11,ME:Defaul:trip:4-0,0,20:00:00,20:00:00,0,0,2,0,1,,,,0 +ME:stop:11,ME:Defaul:trip:4-1,0,20:30:00,20:30:00,0,0,2,0,1,,,,0 +ME:stop:11,ME:Defaul:trip:4-2,0,21:00:00,21:00:00,0,0,2,0,1,,,,0 +ME:stop:11,ME:Defaul:trip:4-3,0,21:30:00,21:30:00,0,0,2,0,1,,,,0 +ME:stop:22,ME:Defaul:trip:4-0,1,20:09:00,20:09:00,0,0,2,0,1,,,,0 +ME:stop:22,ME:Defaul:trip:4-1,1,20:39:00,20:39:00,0,0,2,0,1,,,,0 +ME:stop:22,ME:Defaul:trip:4-2,1,21:09:00,21:09:00,0,0,2,0,1,,,,0 +ME:stop:22,ME:Defaul:trip:4-3,1,21:39:00,21:39:00,0,0,2,0,1,,,,0 +ME:stop:31,ME:Defaul:trip:3-0,0,10:00:00,10:00:00,0,0,0,0,0,,,,0 +ME:stop:32,ME:Defaul:trip:3-0,1,10:13:00,10:15:00,0,0,0,0,0,,,,0 +ME:stop:33,ME:Defaul:trip:3-0,2,10:20:00,10:25:00,0,0,0,0,0,,,,0 +ME:stop:33,ME:Defaul:trip:4-0,2,20:17:00,20:19:00,0,0,2,0,1,,,,0 +ME:stop:33,ME:Defaul:trip:4-1,2,20:47:00,20:49:00,0,0,2,0,1,,,,0 +ME:stop:33,ME:Defaul:trip:4-2,2,21:17:00,21:19:00,0,0,2,0,1,,,,0 +ME:stop:33,ME:Defaul:trip:4-3,2,21:47:00,21:49:00,0,0,2,0,1,,,,0 +ME:stop:51,ME:Defaul:trip:5-0,0,23:00:00,23:00:00,0,0,2,0,0,,,,0 +ME:stop:51,ME:Defaul:trip:5-1,0,23:50:00,23:50:00,0,0,2,0,0,,,,0 +ME:stop:51,ME:Defaul:trip:5-2,0,00:40:00,00:40:00,0,0,2,0,0,,,,0 +ME:stop:52,ME:Defaul:trip:5-0,1,23:47:00,23:47:00,0,0,2,0,0,,,,0 +ME:stop:52,ME:Defaul:trip:5-1,1,24:37:00,24:37:00,0,0,2,0,0,,,,0 +ME:stop:52,ME:Defaul:trip:5-2,1,01:27:00,01:27:00,0,0,2,0,0,,,,0 +ME:stop:53,ME:Defaul:trip:5-0,2,24:17:00,24:17:00,0,0,0,2,0,,,,0 +ME:stop:53,ME:Defaul:trip:5-1,2,25:07:00,25:07:00,0,0,0,2,0,,,,0 +ME:stop:53,ME:Defaul:trip:5-2,2,01:57:00,01:57:00,0,0,0,2,0,,,,0 +ME:stop:61,ME:Defaul:trip:6,0,14:40:00,14:40:00,0,0,2,0,0,,,,0 +ME:stop:61,ME:Defaul:trip:6,1,15:20:00,15:20:00,0,0,2,0,0,,,,0 diff --git a/tests/fixtures/gtfs2ntfs/full_output/trip_properties.txt b/tests/fixtures/gtfs2ntfs/full_output/trip_properties.txt index bc909ffaa..18b2fef61 100644 --- a/tests/fixtures/gtfs2ntfs/full_output/trip_properties.txt +++ b/tests/fixtures/gtfs2ntfs/full_output/trip_properties.txt @@ -1,3 +1,3 @@ trip_property_id,wheelchair_accessible,bike_accepted,air_conditioned,visual_announcement,audible_announcement,appropriate_escort,appropriate_signage,school_vehicle_type -ME:1,1,0,0,0,0,0,0,0 -ME:2,2,0,0,0,0,0,0,0 +ME:Defaul:1,1,0,0,0,0,0,0,0 +ME:Defaul:2,2,0,0,0,0,0,0,0 diff --git a/tests/fixtures/gtfs2ntfs/full_output/trips.txt b/tests/fixtures/gtfs2ntfs/full_output/trips.txt index 31ffb5a17..4049f57e4 100644 --- a/tests/fixtures/gtfs2ntfs/full_output/trips.txt +++ b/tests/fixtures/gtfs2ntfs/full_output/trips.txt @@ -1,10 +1,10 @@ trip_id,route_id,physical_mode_id,dataset_id,service_id,trip_headsign,trip_short_name,block_id,company_id,trip_property_id,geometry_id,journey_pattern_id -ME:trip:3-0,ME:route:2,Metro,ME:DefaultDatasetId,ME:service:1,pouet,,,ME:1,ME:1,, -ME:trip:4-0,ME:route:2,Metro,ME:DefaultDatasetId,ME:service:1,pouet,,,ME:1,ME:1,, -ME:trip:4-1,ME:route:2,Metro,ME:DefaultDatasetId,ME:service:1,pouet,,,ME:1,ME:1,, -ME:trip:4-2,ME:route:2,Metro,ME:DefaultDatasetId,ME:service:1,pouet,,,ME:1,ME:1,, -ME:trip:4-3,ME:route:2,Metro,ME:DefaultDatasetId,ME:service:1,pouet,,,ME:1,ME:1,, -ME:trip:5-0,ME:route:3,Metro,ME:DefaultDatasetId,ME:service:2,pouet,,,ME:2,ME:2,, -ME:trip:5-1,ME:route:3,Metro,ME:DefaultDatasetId,ME:service:2,pouet,,,ME:2,ME:2,, -ME:trip:5-2,ME:route:3,Metro,ME:DefaultDatasetId,ME:service:2:+1days,pouet,,,ME:2,ME:2,, -ME:trip:6,ME:route:3,Metro,ME:DefaultDatasetId,ME:service:2,pouet,,,ME:2,,, +ME:Defaul:trip:3-0,ME:route:2,Metro,ME:DefaultDatasetId,ME:Defaul:service:1,pouet,,,ME:1,ME:Defaul:1,, +ME:Defaul:trip:4-0,ME:route:2,Metro,ME:DefaultDatasetId,ME:Defaul:service:1,pouet,,,ME:1,ME:Defaul:1,, +ME:Defaul:trip:4-1,ME:route:2,Metro,ME:DefaultDatasetId,ME:Defaul:service:1,pouet,,,ME:1,ME:Defaul:1,, +ME:Defaul:trip:4-2,ME:route:2,Metro,ME:DefaultDatasetId,ME:Defaul:service:1,pouet,,,ME:1,ME:Defaul:1,, +ME:Defaul:trip:4-3,ME:route:2,Metro,ME:DefaultDatasetId,ME:Defaul:service:1,pouet,,,ME:1,ME:Defaul:1,, +ME:Defaul:trip:5-0,ME:route:3,Metro,ME:DefaultDatasetId,ME:Defaul:service:2,pouet,,,ME:2,ME:Defaul:2,, +ME:Defaul:trip:5-1,ME:route:3,Metro,ME:DefaultDatasetId,ME:Defaul:service:2,pouet,,,ME:2,ME:Defaul:2,, +ME:Defaul:trip:5-2,ME:route:3,Metro,ME:DefaultDatasetId,ME:Defaul:service:2:+1days,pouet,,,ME:2,ME:Defaul:2,, +ME:Defaul:trip:6,ME:route:3,Metro,ME:DefaultDatasetId,ME:Defaul:service:2,pouet,,,ME:2,,, diff --git a/tests/gtfs2ntfs.rs b/tests/gtfs2ntfs.rs index f2a3a0221..0bdfc330b 100644 --- a/tests/gtfs2ntfs.rs +++ b/tests/gtfs2ntfs.rs @@ -12,24 +12,40 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see -use std::path::Path; -use transit_model::gtfs::Configuration; -use transit_model::test_utils::*; - -static DEFAULT_CONFIGURATION: Configuration<&Path> = Configuration { - config_path: None, - prefix: None, - on_demand_transport: false, - on_demand_transport_comment: None, +use std::collections::BTreeMap; +use transit_model::{ + gtfs, ntfs, + objects::{Contributor, Dataset}, + read_utils::read_config, + test_utils::*, + PrefixConfiguration, }; +fn default_configuration() -> gtfs::Configuration { + gtfs::Configuration { + contributor: Contributor::default(), + dataset: Dataset::default(), + feed_infos: BTreeMap::new(), + prefix_conf: None, + on_demand_transport: false, + on_demand_transport_comment: None, + } +} + #[test] fn test_gtfs() { test_in_tmp_dir(|path| { let input_dir = "./tests/fixtures/gtfs"; + let (contributor, dataset, feed_infos) = + read_config(Some("./tests/fixtures/gtfs2ntfs/config.json")).unwrap(); + let mut prefix_conf = PrefixConfiguration::default(); + prefix_conf.set_data_prefix("ME"); + prefix_conf.set_dataset_id(&dataset.id); let configuration = transit_model::gtfs::Configuration { - config_path: Some("./tests/fixtures/gtfs2ntfs/config.json"), - prefix: Some("ME".to_string()), + dataset, + contributor, + feed_infos, + prefix_conf: Some(prefix_conf), on_demand_transport: false, on_demand_transport_comment: None, }; @@ -43,9 +59,8 @@ fn test_gtfs() { fn test_minimal_gtfs() { test_in_tmp_dir(|path| { let input_dir = "./tests/fixtures/gtfs2ntfs/minimal/input"; - let model = - transit_model::gtfs::read_from_path(input_dir, DEFAULT_CONFIGURATION.clone()).unwrap(); - transit_model::ntfs::write(&model, path, get_test_datetime()).unwrap(); + let model = gtfs::read_from_path(input_dir, default_configuration()).unwrap(); + ntfs::write(&model, path, get_test_datetime()).unwrap(); compare_output_dir_with_expected(&path, None, "./tests/fixtures/gtfs2ntfs/minimal/output"); }); } @@ -54,9 +69,8 @@ fn test_minimal_gtfs() { fn test_gtfs_physical_modes() { test_in_tmp_dir(|path| { let input_dir = "./tests/fixtures/gtfs2ntfs/physical_modes/input"; - let model = - transit_model::gtfs::read_from_path(input_dir, DEFAULT_CONFIGURATION.clone()).unwrap(); - transit_model::ntfs::write(&model, path, get_test_datetime()).unwrap(); + let model = gtfs::read_from_path(input_dir, default_configuration()).unwrap(); + ntfs::write(&model, path, get_test_datetime()).unwrap(); compare_output_dir_with_expected( &path, Some(vec![ @@ -74,9 +88,8 @@ fn test_gtfs_physical_modes() { fn test_gtfs_remove_vjs_with_no_traffic() { test_in_tmp_dir(|path| { let input_dir = "./tests/fixtures/gtfs2ntfs/no_traffic/input"; - let model = - transit_model::gtfs::read_from_path(input_dir, DEFAULT_CONFIGURATION.clone()).unwrap(); - transit_model::ntfs::write(&model, path, get_test_datetime()).unwrap(); + let model = gtfs::read_from_path(input_dir, default_configuration()).unwrap(); + ntfs::write(&model, path, get_test_datetime()).unwrap(); compare_output_dir_with_expected( &path, Some(vec![ @@ -96,9 +109,8 @@ fn test_gtfs_remove_vjs_with_no_traffic() { fn test_minimal_ziped_gtfs() { test_in_tmp_dir(|path| { let input = "./tests/fixtures/ziped_gtfs/gtfs.zip"; - let model = - transit_model::gtfs::read_from_zip(input, DEFAULT_CONFIGURATION.clone()).unwrap(); - transit_model::ntfs::write(&model, path, get_test_datetime()).unwrap(); + let model = gtfs::read_from_zip(input, default_configuration()).unwrap(); + ntfs::write(&model, path, get_test_datetime()).unwrap(); compare_output_dir_with_expected(&path, None, "./tests/fixtures/gtfs2ntfs/minimal/output"); }); } @@ -107,9 +119,8 @@ fn test_minimal_ziped_gtfs() { fn test_minimal_ziped_sub_dir_gtfs() { test_in_tmp_dir(|path| { let input = "./tests/fixtures/ziped_gtfs/sub_dir_gtfs.zip"; - let model = - transit_model::gtfs::read_from_zip(input, DEFAULT_CONFIGURATION.clone()).unwrap(); - transit_model::ntfs::write(&model, path, get_test_datetime()).unwrap(); + let model = gtfs::read_from_zip(input, default_configuration()).unwrap(); + ntfs::write(&model, path, get_test_datetime()).unwrap(); compare_output_dir_with_expected(&path, None, "./tests/fixtures/gtfs2ntfs/minimal/output"); }); } @@ -118,9 +129,8 @@ fn test_minimal_ziped_sub_dir_gtfs() { fn test_minimal_ziped_sub_dir_gtfs_with_hidden_files() { test_in_tmp_dir(|path| { let input = "./tests/fixtures/ziped_gtfs/sub_dir_gtfs_with_hidden_files.zip"; - let model = - transit_model::gtfs::read_from_zip(input, DEFAULT_CONFIGURATION.clone()).unwrap(); - transit_model::ntfs::write(&model, path, get_test_datetime()).unwrap(); + let model = gtfs::read_from_zip(input, default_configuration()).unwrap(); + ntfs::write(&model, path, get_test_datetime()).unwrap(); compare_output_dir_with_expected(&path, None, "./tests/fixtures/gtfs2ntfs/minimal/output"); }); } @@ -129,17 +139,20 @@ fn test_minimal_ziped_sub_dir_gtfs_with_hidden_files() { fn test_minimal_gtfs_with_odt_comment() { test_in_tmp_dir(|path| { let input_dir = "./tests/fixtures/gtfs2ntfs/minimal/input"; - let configuration: transit_model::gtfs::Configuration<&Path> = - transit_model::gtfs::Configuration { - config_path: None, - prefix: Some("test".to_string()), - on_demand_transport: false, - on_demand_transport_comment: Some( - "Service à réservation {agency_name} {agency_phone}".to_string(), - ), - }; - let model = transit_model::gtfs::read_from_path(input_dir, configuration).unwrap(); - transit_model::ntfs::write(&model, path, get_test_datetime()).unwrap(); + let mut prefix_conf = PrefixConfiguration::default(); + prefix_conf.set_data_prefix("test"); + let configuration = gtfs::Configuration { + contributor: Contributor::default(), + dataset: Dataset::default(), + feed_infos: BTreeMap::new(), + prefix_conf: Some(prefix_conf), + on_demand_transport: false, + on_demand_transport_comment: Some( + "Service à réservation {agency_name} {agency_phone}".to_string(), + ), + }; + let model = gtfs::read_from_path(input_dir, configuration).unwrap(); + ntfs::write(&model, path, get_test_datetime()).unwrap(); compare_output_dir_with_expected( &path, Some(vec!["comment_links.txt", "comments.txt", "stop_times.txt"]), @@ -152,18 +165,21 @@ fn test_minimal_gtfs_with_odt_comment() { fn test_minimal_gtfs_frequencies_with_odt_comment() { test_in_tmp_dir(|path| { let input_dir = "./tests/fixtures/gtfs2ntfs/frequencies/input"; - let configuration: transit_model::gtfs::Configuration<&Path> = - transit_model::gtfs::Configuration { - config_path: None, - prefix: Some("test".to_string()), - on_demand_transport: false, - on_demand_transport_comment: Some( - "Service à réservation {agency_name} {agency_phone}".to_string(), - ), - }; + let mut prefix_conf = PrefixConfiguration::default(); + prefix_conf.set_data_prefix("test"); + let configuration = gtfs::Configuration { + contributor: Contributor::default(), + dataset: Dataset::default(), + feed_infos: BTreeMap::new(), + prefix_conf: Some(prefix_conf), + on_demand_transport: false, + on_demand_transport_comment: Some( + "Service à réservation {agency_name} {agency_phone}".to_string(), + ), + }; - let model = transit_model::gtfs::read_from_path(input_dir, configuration).unwrap(); - transit_model::ntfs::write(&model, path, get_test_datetime()).unwrap(); + let model = gtfs::read_from_path(input_dir, configuration).unwrap(); + ntfs::write(&model, path, get_test_datetime()).unwrap(); compare_output_dir_with_expected( &path, Some(vec!["comment_links.txt", "comments.txt", "stop_times.txt"]), diff --git a/tests/write_netex_france.rs b/tests/write_netex_france.rs index 231e43117..35d341ec7 100644 --- a/tests/write_netex_france.rs +++ b/tests/write_netex_france.rs @@ -12,11 +12,16 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see -use std::fs; -use std::path::Path; +use std::{collections::BTreeMap, fs}; #[cfg(feature = "xmllint")] use std::{ffi::OsStr, process::Command}; -use transit_model::{self, model::Model, netex_france, test_utils::*}; +use transit_model::{ + gtfs, + model::Model, + netex_france, ntfs, + objects::{Contributor, Dataset}, + test_utils::*, +}; fn test_write_netex_france(model: Model) { test_in_tmp_dir(|output_dir| { @@ -52,31 +57,30 @@ fn test_write_netex_france(model: Model) { #[test] fn test_write_netex_france_from_ntfs() { - let model = transit_model::ntfs::read("tests/fixtures/netex_france/input_ntfs").unwrap(); + let model = ntfs::read("tests/fixtures/netex_france/input_ntfs").unwrap(); test_write_netex_france(model); } #[test] fn test_write_netex_france_from_gtfs() { - let configuration: transit_model::gtfs::Configuration<&Path> = - transit_model::gtfs::Configuration { - config_path: None, - prefix: None, - on_demand_transport: false, - on_demand_transport_comment: None, - }; + let configuration = gtfs::Configuration { + contributor: Contributor::default(), + dataset: Dataset::default(), + feed_infos: BTreeMap::new(), + prefix_conf: None, + on_demand_transport: false, + on_demand_transport_comment: None, + }; - let model = transit_model::gtfs::read_from_path( - "tests/fixtures/netex_france/input_gtfs", - configuration, - ) - .unwrap(); + let model = + gtfs::read_from_path("tests/fixtures/netex_france/input_gtfs", configuration).unwrap(); test_write_netex_france(model); } #[test] #[cfg(feature = "xmllint")] fn validate_xml_schemas() { + use std::path::Path; fn check_xml_in_folder

(path: P) where P: AsRef,