sdmx_json_de_tests/
lib.rs1use std::error::Error;
2use std::fmt::Display;
3use std::fs::read_to_string;
4use std::str::FromStr;
5
6#[derive(Debug)]
7pub enum ReadJsonError {
8 IO(std::io::Error),
9 Serde(serde_json::Error),
10}
11
12impl Error for ReadJsonError {}
13impl Display for ReadJsonError {
14 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
15 match self {
16 ReadJsonError::IO(e) => write!(f, "IO error while reading: {}", e),
17 ReadJsonError::Serde(e) => write!(f, "Serde error while parsing: {}", e),
18 }
19 }
20}
21
22pub fn read_json<T>(path: &str) -> Result<T, ReadJsonError>
23where
24 T: FromStr<Err = serde_json::Error>,
25{
26 match read_to_string(path) {
27 Ok(s) => T::from_str(&s).map_err(ReadJsonError::Serde),
28 Err(e) => Err(ReadJsonError::IO(e)),
29 }
30}
31
32#[macro_export]
33macro_rules! fixture {
34 ($fname:expr) => {
35 concat!(env!("CARGO_MANIFEST_DIR"), "/files/", $fname) };
37}
38
39#[cfg(test)]
40mod tests_data_message {
41 use super::*;
42 use sdmx_json::data::DataMessage;
43
44 #[test]
45 #[cfg_attr(miri, ignore)]
46 fn test_constructed_sample_full() {
47 let file = read_json::<DataMessage>(fixture!("data/twg-constructed-sample-full.json"));
48 assert!(file.is_ok(), "{:?}", file);
49 }
50
51 #[test]
52 #[cfg_attr(miri, ignore)]
53 fn test_generated_sample() {
54 let file = read_json::<DataMessage>(fixture!("data/twg-generated-sample.json"));
55 assert!(file.is_ok(), "{:?}", file);
56 }
57}
58
59#[cfg(test)]
60mod tests_metadata_message {
61 use super::*;
62 use sdmx_json::metadata::MetadataMessage;
63
64 #[test]
65 #[cfg_attr(miri, ignore)]
66 fn test_constructed_sample() {
67 let file = read_json::<MetadataMessage>(fixture!("metadata/twg-constructed-sample.json"));
68 assert!(file.is_ok(), "{:?}", file);
69 }
70
71 #[test]
72 #[cfg_attr(miri, ignore)]
73 fn test_constructed_sample2() {
74 let file = read_json::<MetadataMessage>(fixture!("metadata/twg-constructed-sample2.json"));
75 assert!(file.is_ok(), "{:?}", file);
76 }
77
78 #[test]
79 #[cfg_attr(miri, ignore)]
80 fn test_generated_sample() {
81 let file = read_json::<MetadataMessage>(fixture!("metadata/twg-generated-sample.json"));
82 assert!(file.is_ok(), "{:?}", file);
83 }
84}
85
86#[cfg(test)]
87mod tests_structure_message {
88 use super::*;
89 use sdmx_json::structure::StructureMessage;
90
91 #[test]
92 #[cfg_attr(miri, ignore)]
93 fn test_constructed_sample() {
94 let file = read_json::<StructureMessage>(fixture!("structure/twg-constructed-sample.json"));
95 assert!(file.is_ok(), "{:?}", file);
96 }
97
98 #[test]
99 #[cfg_attr(miri, ignore)]
100 fn test_generated_sample() {
101 let file = read_json::<StructureMessage>(fixture!("structure/twg-generated-sample.json"));
102 assert!(file.is_ok(), "{:?}", file);
103 }
104}