weavatrix-rust 2.1.1

Protocol-independent Rust repository intelligence: typed evidence graphs for impact, architecture, APIs, Git, search, and memory
Documentation
use super::{
    Call, Certainty, Detection, Entity, ProviderHints, Role, Transport, bindings_none,
    non_empty_resources, property, resource_values,
};

pub(super) fn detect_nats(
    call: &Call<'_, '_>,
    name: &str,
    chain: &str,
    hints: ProviderHints,
) -> Option<Detection> {
    if !hints.nats && !chain.contains("nats") {
        return None;
    }
    let role = match name {
        "publish" | "request" => Role::Producer,
        "subscribe" | "queuesubscribe" | "queue_subscribe" => Role::Consumer,
        _ => return None,
    };
    Some(Detection {
        transport: Transport::Nats,
        entity: Entity::Subject,
        role,
        resources: non_empty_resources(resource_values(call, &["subject"], 0, bindings_none())),
        exchange: None,
        routing_key: None,
        consumer_group: property(call, &["queue", "queue_group"]),
        certainty: Certainty::Exact,
        uncertainty: None,
    })
}