pub struct TraceContext { /* private fields */ }
Expand description
Extract and apply Trace-Context headers.
§Specifications
§Examples
use http_types::trace::TraceContext;
let mut res = http_types::Response::new(200);
res.insert_header(
"traceparent",
"00-0af7651916cd43dd8448eb211c80319c-00f067aa0ba902b7-01"
);
let context = TraceContext::from_headers(&res)?.unwrap();
let trace_id = u128::from_str_radix("0af7651916cd43dd8448eb211c80319c", 16);
let parent_id = u64::from_str_radix("00f067aa0ba902b7", 16);
assert_eq!(context.trace_id(), trace_id.unwrap());
assert_eq!(context.parent_id(), parent_id.ok());
assert_eq!(context.sampled(), true);
Implementations§
Source§impl TraceContext
impl TraceContext
Sourcepub fn new() -> Self
pub fn new() -> Self
Generate a new TraceContext object without a parent.
By default root TraceContext objects are sampled.
To mark it unsampled, call context.set_sampled(false)
.
§Examples
use http_types::trace::TraceContext;
let context = TraceContext::new();
assert_eq!(context.parent_id(), None);
assert_eq!(context.sampled(), true);
Sourcepub fn from_headers(headers: impl AsRef<Headers>) -> Result<Option<Self>>
pub fn from_headers(headers: impl AsRef<Headers>) -> Result<Option<Self>>
Create and return TraceContext object based on traceparent
HTTP header.
§Errors
This function may error if the header is malformed. An error with a
status code of 400: Bad Request
will be generated.
§Examples
use http_types::trace::TraceContext;
let mut res = http_types::Response::new(200);
res.insert_header(
"traceparent",
"00-0af7651916cd43dd8448eb211c80319c-00f067aa0ba902b7-01"
);
let context = TraceContext::from_headers(&res)?.unwrap();
let trace_id = u128::from_str_radix("0af7651916cd43dd8448eb211c80319c", 16);
let parent_id = u64::from_str_radix("00f067aa0ba902b7", 16);
assert_eq!(context.trace_id(), trace_id.unwrap());
assert_eq!(context.parent_id(), parent_id.ok());
assert_eq!(context.sampled(), true);
Sourcepub fn apply(&self, headers: impl AsMut<Headers>)
pub fn apply(&self, headers: impl AsMut<Headers>)
Add the traceparent header to the http headers
§Examples
use http_types::trace::TraceContext;
use http_types::{Request, Response, Url, Method};
let mut req = Request::new(Method::Get, Url::parse("https://example.com").unwrap());
req.insert_header(
"traceparent",
"00-0af7651916cd43dd8448eb211c80319c-00f067aa0ba902b7-01"
);
let parent = TraceContext::from_headers(&req)?.unwrap();
let mut res = Response::new(200);
parent.apply(&mut res);
let child = TraceContext::from_headers(&res)?.unwrap();
assert_eq!(child.version(), parent.version());
assert_eq!(child.trace_id(), parent.trace_id());
assert_eq!(child.parent_id(), Some(parent.id()));
Sourcepub fn name(&self) -> HeaderName
pub fn name(&self) -> HeaderName
Get the HeaderName
.
Sourcepub fn value(&self) -> HeaderValue
pub fn value(&self) -> HeaderValue
Get the HeaderValue
.
Sourcepub fn child(&self) -> Self
pub fn child(&self) -> Self
Generate a child of the current TraceContext and return it.
The child will have a new randomly genrated id
and its parent_id
will be set to the
id
of this TraceContext.
Sourcepub fn version(&self) -> u8
pub fn version(&self) -> u8
Return the version of the TraceContext spec used.
You probably don’t need this.
Sourcepub fn trace_id(&self) -> u128
pub fn trace_id(&self) -> u128
Return the trace id of the TraceContext.
All children will have the same trace_id
.
Sourcepub fn sampled(&self) -> bool
pub fn sampled(&self) -> bool
Returns true if the trace is sampled
§Examples
use http_types::trace::TraceContext;
use http_types::Response;
let mut res = Response::new(200);
res.insert_header("traceparent", "00-00000000000000000000000000000001-0000000000000002-01");
let context = TraceContext::from_headers(&res)?.unwrap();
assert_eq!(context.sampled(), true);
Sourcepub fn set_sampled(&mut self, sampled: bool)
pub fn set_sampled(&mut self, sampled: bool)
Change sampled flag
§Examples
use http_types::trace::TraceContext;
let mut context = TraceContext::new();
assert_eq!(context.sampled(), true);
context.set_sampled(false);
assert_eq!(context.sampled(), false);
Trait Implementations§
Source§impl Debug for TraceContext
impl Debug for TraceContext
Auto Trait Implementations§
impl Freeze for TraceContext
impl RefUnwindSafe for TraceContext
impl Send for TraceContext
impl Sync for TraceContext
impl Unpin for TraceContext
impl UnwindSafe for TraceContext
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more