fhirpathrs 0.1.0

Fhirpath implementation in Rust
Documentation
use serde_json::json;

use crate::{
    evaluate::{EvaluateResult, Evaluate, Text},
};
use crate::parser::identifier::LiteralDelimitedIdentifier;
use super::resource_node::ResourceNode;

impl Evaluate for LiteralDelimitedIdentifier {
    fn evaluate<'a, 'b>(&self, input: &'a ResourceNode<'a, 'b>) -> EvaluateResult<ResourceNode<'a, 'b>> {
        Ok(ResourceNode::from_node(input, json!(self.text.clone())))
    }
}

impl Text for LiteralDelimitedIdentifier {
    fn text(&self) -> EvaluateResult<String> {
        Ok(format!("`{}`", self.text.clone()))
    }
}

#[cfg(test)]
mod test {
    use serde_json::json;
    use crate::evaluate::test::test::{run_tests, Expected, TestCase};

    #[test]
    fn test_delimited_path() {
        let test_cases: Vec<TestCase> = vec![
            TestCase {
                path: "`Patient`.name.`given`".to_string(),
                input: json!({
                    "resourceType": "Patient",
                    "name": [
                        {
                            "given": ["test1", "test2"]
                        }
                    ]
                }),
                expected: Expected::Value(json!(["test1", "test2"])),
                options: None,
            },
        ];

        run_tests(test_cases);
    }
}