fluidattacks-blends-domain 0.2.0

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

use crate::syntax::readers::yaml;
use crate::syntax::SyntaxReader;

#[must_use]
pub fn dispatcher(node_type: &str) -> Option<SyntaxReader> {
    match node_type {
        "block_mapping" | "flow_mapping" => Some(yaml::block_mapping::reader),
        "block_mapping_pair" | "flow_pair" => Some(yaml::block_mapping_pair::reader),
        "block_sequence" => Some(yaml::block_sequence::reader),
        "comment" => Some(yaml::comment::reader),
        "flow_node" => Some(yaml::flow_node::reader),
        "flow_sequence" => Some(yaml::flow_sequence::reader),
        "stream" => Some(yaml::stream::reader),
        _ => None,
    }
}

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

    #[test]
    fn maps_the_implemented_yaml_node_types() {
        assert!(dispatcher("stream").is_some());
        assert!(dispatcher("block_mapping").is_some());
        assert!(dispatcher("flow_mapping").is_some());
        assert!(dispatcher("block_sequence").is_some());
        assert!(dispatcher("comment").is_some());
        assert!(dispatcher("flow_sequence").is_some());
        assert!(dispatcher("block_mapping_pair").is_some());
        assert!(dispatcher("flow_pair").is_some());
        assert!(dispatcher("flow_node").is_some());
    }

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