use serde::Deserialize;
pub fn peek_version(json: &str) -> u32 {
#[derive(Deserialize)]
struct VersionPeek {
#[serde(default = "default_version")]
version: u32,
}
fn default_version() -> u32 {
1
}
serde_json::from_str::<VersionPeek>(json)
.map(|v| v.version)
.unwrap_or(1)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn returns_1_when_field_absent() {
assert_eq!(peek_version(r#"{"cuques": 100}"#), 1);
}
#[test]
fn returns_1_on_invalid_json() {
assert_eq!(peek_version("not json"), 1);
}
#[test]
fn reads_the_field_when_present() {
assert_eq!(peek_version(r#"{"version": 7, "cuques": 100}"#), 7);
}
#[test]
fn returns_1_when_version_is_non_numeric() {
assert_eq!(peek_version(r#"{"version": "1"}"#), 1);
}
}