opentelemetry_sdk/trace/id_generator/
mod.rs
1use opentelemetry::trace::{SpanId, TraceId};
2use rand::{rngs, Rng, SeedableRng};
3use std::cell::RefCell;
4use std::fmt;
5
6pub trait IdGenerator: Send + Sync + fmt::Debug {
8 fn new_trace_id(&self) -> TraceId;
10
11 fn new_span_id(&self) -> SpanId;
13}
14
15#[derive(Clone, Debug, Default)]
19pub struct RandomIdGenerator {
20 _private: (),
21}
22
23impl IdGenerator for RandomIdGenerator {
24 fn new_trace_id(&self) -> TraceId {
25 CURRENT_RNG.with(|rng| TraceId::from(rng.borrow_mut().gen::<u128>()))
26 }
27
28 fn new_span_id(&self) -> SpanId {
29 CURRENT_RNG.with(|rng| SpanId::from(rng.borrow_mut().gen::<u64>()))
30 }
31}
32
33thread_local! {
34 static CURRENT_RNG: RefCell<rngs::SmallRng> = RefCell::new(rngs::SmallRng::from_entropy());
36}