mirror of
https://github.com/tokio-rs/tokio.git
synced 2026-08-27 00:00:12 +02:00
## Motivation To ease the implementation of `Subscriber::register_callsite`, a field should be added to `Metadata` to indicate if this callsite is an event or a span. ## Solution A new struct, `Kind`, is added to the `metadata` module in `tokio-trace-core`, and a `Kind` field is added to the `Metadata` struct. Macros which construct `metadata` now require a `Kind`. `Kind` is represented as a struct with a private inner enum to allow new `Kind`s to be added without breaking changes. However, the _addition_ of the kind field _is_ a breaking change. While this could be done in a backward-compatible way, it would permit the construction of metadata with unknown kinds, and since the next `tokio-trace-core` release will be a breaking change, I opted to make the breaking change instead. New API tests for the `callsite!` and `metadata!` macros have been added to guard against future API breakage. Fixes: #986 Closes: #1008 Co-Authored-By: csmoe <[email protected]>
50 lines
1.2 KiB
Rust
50 lines
1.2 KiB
Rust
#[macro_use]
|
|
extern crate tokio_trace_core;
|
|
use tokio_trace_core::{
|
|
callsite::Callsite,
|
|
metadata::{Kind, Level, Metadata},
|
|
subscriber::Interest,
|
|
};
|
|
|
|
#[test]
|
|
fn metadata_macro_api() {
|
|
// This test should catch any inadvertant breaking changes
|
|
// caused bu changes to the macro.
|
|
struct TestCallsite;
|
|
|
|
impl Callsite for TestCallsite {
|
|
fn set_interest(&self, _: Interest) {
|
|
unimplemented!("test")
|
|
}
|
|
fn metadata(&self) -> &Metadata {
|
|
unimplemented!("test")
|
|
}
|
|
}
|
|
|
|
static CALLSITE: TestCallsite = TestCallsite;
|
|
let _metadata = metadata! {
|
|
name: "test_metadata",
|
|
target: "test_target",
|
|
level: Level::DEBUG,
|
|
fields: &["foo", "bar", "baz"],
|
|
callsite: &CALLSITE,
|
|
kind: Kind::SPAN,
|
|
};
|
|
let _metadata = metadata! {
|
|
name: "test_metadata",
|
|
target: "test_target",
|
|
level: Level::TRACE,
|
|
fields: &[],
|
|
callsite: &CALLSITE,
|
|
kind: Kind::EVENT,
|
|
};
|
|
let _metadata = metadata! {
|
|
name: "test_metadata",
|
|
target: "test_target",
|
|
level: Level::INFO,
|
|
fields: &[],
|
|
callsite: &CALLSITE,
|
|
kind: Kind::EVENT
|
|
};
|
|
}
|