1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
use serde::Deserialize; use serde_json; use tourist_types::Tour; pub mod version1; pub use version1 as latest; #[derive(Deserialize, Debug)] #[serde(rename_all = "camelCase")] struct TfProtocol<'a> { protocol_version: &'a str, } pub fn parse_tour<'a>(s: &'a str) -> Result<Tour, serde_json::Error> { let pv: TfProtocol<'a> = serde_json::from_str(s)?; Ok(match pv.protocol_version { version1::PROTOCOL_VERSION => serde_json::from_str::<version1::TourFile>(s)?.to_tour(), _ => panic!("Unexpected protocol version in tour file."), }) } #[cfg(test)] mod tests { use super::latest; #[test] fn latest_is_correct() { assert_eq!(latest::PROTOCOL_VERSION, "1.0"); } }