stubr 0.6.2

Wiremock implemented in Rust
Documentation
use jsonpath_plus::ast::RawSelector;
use serde_json::{json, Value};

use super::JsonGeneratorIterator;

pub struct DotGenerator<'a>(pub &'a RawSelector);

impl JsonGeneratorIterator for DotGenerator<'_> {
    fn next(self, acc_json: Value) -> Option<Value> {
        match self.0 {
            RawSelector::Name(name) => Some(json!({ name.as_str(): acc_json })),
            _ => None,
        }
    }
}

#[cfg(test)]
mod jsonpath_generator_dot_tests {
    use serde_json::json;

    use super::{super::JsonPathGenerator, *};

    mod name {
        use super::*;

        #[test]
        fn single_dot_should_generate() {
            let doe = json!({"name": "doe"});
            let value = JsonPathGenerator("$.a").next(doe.clone()).unwrap();
            assert_eq!(value, json!({ "a": doe }));
        }

        #[test]
        fn many_dots_generate() {
            let doe = json!({"name": "doe"});
            let value = JsonPathGenerator("$.a.b.c").next(doe.clone()).unwrap();
            assert_eq!(value, json!({"a": { "b": { "c": doe } }}));
        }
    }
}