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