textlane 0.6.1

Rust-native text processing pipeline — a unified replacement with native and JavaScript plugins
Documentation
use serde_json::Value;

use super::describe_plugins;

fn find_upstream<'a>(described: &'a Value, domain: &str, name: &str) -> &'a Value {
    let plugins = described[domain]["plugins"].as_array().map(Vec::as_slice);
    let plugin = plugins
        .unwrap_or_default()
        .iter()
        .find(|plugin| plugin["name"] == name);
    plugin.map_or(&Value::Null, |plugin| &plugin["upstream"])
}

#[test]
fn lists_each_plugins_upstream() {
    let described = describe_plugins();
    assert_eq!(find_upstream(&described, "md", "md.gfm"), "remark-gfm");
    assert_eq!(
        find_upstream(&described, "html", "html.sanitize"),
        "rehype-sanitize"
    );
}