fluidattacks-blends-domain 0.6.1

Blends functional core: pure AST graph to syntax graph (no_std)
Documentation
//! Counterpart of `blends/syntax/dispatchers/json_dispatchers.py`.

use crate::syntax::readers::json;
use crate::syntax::SyntaxReader;

#[must_use]
pub fn dispatcher(node_type: &str) -> Option<SyntaxReader> {
    match node_type {
        "array" => Some(json::array_node::reader),
        "comment" => Some(json::comment::reader),
        "document" => Some(json::document::reader),
        "false" | "true" => Some(json::boolean::reader),
        "number" => Some(json::number::reader),
        "object" => Some(json::object::reader),
        "pair" => Some(json::pair::reader),
        "string" => Some(json::string_node::reader),
        _ => None,
    }
}

#[cfg(test)]
mod tests {
    use super::dispatcher;

    #[test]
    fn maps_the_implemented_json_node_types() {
        assert!(dispatcher("document").is_some());
        assert!(dispatcher("object").is_some());
        assert!(dispatcher("pair").is_some());
        assert!(dispatcher("array").is_some());
        assert!(dispatcher("true").is_some());
        assert!(dispatcher("false").is_some());
        assert!(dispatcher("number").is_some());
        assert!(dispatcher("string").is_some());
        assert!(dispatcher("comment").is_some());
    }

    #[test]
    fn unmapped_node_types_have_no_reader() {
        assert!(dispatcher("stream").is_none());
        assert!(dispatcher("").is_none());
    }
}