crypt_config/config/
version.rs1extern crate serde;
2extern crate serde_json;
3
4use serde::{Deserialize, Serialize};
5
6use crate::error::CryptResult;
7
8#[derive(Serialize, Deserialize)]
9struct Version {
10 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}