crypt_config/config/
version.rs

1extern crate serde;
2extern crate serde_json;
3
4use serde::{Deserialize, Serialize};
5
6use crate::error::CryptResult;
7
8#[derive(Serialize, Deserialize)]
9struct Version {
10  //    #[serde(default, skip_serializing)]
11  version: String
12}
13
14#[allow(dead_code)]
15pub fn get_config_version(json: &str) -> CryptResult<String> {
16  let v: Version = serde_json::from_str(json)?;
17
18  Ok(v.version)
19}
20
21#[cfg(test)]
22mod tests {
23  use super::get_config_version;
24  #[test]
25  fn version_valid() {
26    let ver = "1.0.0";
27    let json = r#"
28        {
29            "version": "1.0.0"
30        }"#;
31
32    let out = get_config_version(&json).unwrap();
33
34    assert_eq!(ver, out);
35  }
36
37  #[test]
38  fn allow_unknown_fields() {
39    let ver = "1.0.0";
40    let json = r#"
41        {
42            "version": "1.0.0",
43            "unknown": "0.0.0"
44        }"#;
45
46    let out = get_config_version(&json).unwrap();
47
48    assert_eq!(ver, out);
49  }
50
51  #[test]
52  fn version_missing() {
53    let json = r#"{}"#;
54
55    let out = get_config_version(&json);
56
57    assert!(out.is_err(), "Lack of version field in json should return error")
58  }
59}