tracing-stackdriver 0.10.0

Stackdriver-compatible tracing layer and event formatter
Documentation
use helpers::run_with_tracing;
use mocks::MockDefaultEvent;
use std::collections::BTreeMap;

mod helpers;
mod mocks;

#[test]
fn nests_labels() {
    let mut labels = BTreeMap::new();
    labels.insert("foo", "bar".to_string());
    labels.insert("baz", "luhrmann".to_string());

    let events = run_with_tracing::<MockDefaultEvent>(|| {
        tracing::info!(
            labels.foo = labels.get("foo"),
            labels.baz = labels.get("baz"),
            "hello!"
        )
    })
    .expect("Error converting test buffer to JSON");

    let event = events.first().expect("No event heard");
    assert!(event.labels.get("foo").is_some());
    assert_eq!(event.labels.get("foo"), labels.get("foo"));
    assert!(event.labels.get("baz").is_some());
    assert_eq!(event.labels.get("baz"), labels.get("baz"));
}

#[test]
fn stringifies_primitive_label_values() {
    let number = 2;
    let boolean = false;
    let string = "a short note";
    let events = run_with_tracing::<MockDefaultEvent>(|| {
        tracing::info!(
            labels.number = number,
            labels.boolean = boolean,
            labels.string = string,
            "hello!"
        )
    })
    .expect("Error converting test buffer to JSON");

    let event = events.first().expect("No event heard");
    assert_eq!(event.labels.get("number"), Some(&number.to_string()));
    assert_eq!(event.labels.get("boolean"), Some(&boolean.to_string()));
    assert_eq!(event.labels.get("string"), Some(&string.to_string()));
}

#[test]
fn omits_labels_by_default() {
    let events = run_with_tracing::<MockDefaultEvent>(|| tracing::info!("hello!"))
        .expect("Error converting test buffer to JSON");

    let event = events.first().expect("No event heard");
    assert!(event.labels.is_empty());
}