sdmx_json_de_tests/
lib.rs

1use 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) // assumes Linux ('/')!
36	};
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}