fhirpathrs 0.1.0

Fhirpath implementation in Rust
Documentation
#[cfg(test)]
pub mod test {
    use std::sync::Arc;
    use assert_json_diff::assert_json_eq;
    use serde_json::Value;
    use crate::error::FhirpathError;
    use crate::evaluate::{compile, EvaluateOptions};

    pub enum Expected {
        Value(Value),
        Error(FhirpathError),
    }

    pub struct TestCase<'a> {
        pub path: String,
        pub input: Value,
        pub options: Option<EvaluateOptions<'a>>,
        pub expected: Expected,
    }

    pub fn run_tests(tests: Vec<TestCase>) {
        tests.into_iter().for_each(|test| {
            println!("Test");
            println!("{}", &test.path);

            let compiled = compile(&test.path).unwrap();

            println!("{:?}", compiled.expression);

            let opts = test.options.and_then(|opts| Some(Arc::new(opts)));

            let evaluate_result = compiled.evaluate_single(test.input, opts);

            println!("{:?}", evaluate_result);

            match test.expected {
                Expected::Value(value) => {
                    let evaluate_value = evaluate_result.unwrap();

                    assert_json_eq!(evaluate_value, value);
                },
                Expected::Error(err) => {
                    let evaluate_error = evaluate_result.err().unwrap();

                    assert_eq!(evaluate_error, err);
                }
            }

        });
    }
}