Skip to main content

tourist_serde/
lib.rs

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}