extern crate thread_id;
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
pub struct ThreadId(pub usize);
impl ThreadId {
pub fn get() -> ThreadId {
ThreadId(thread_id::get())
}
}
pub trait TraceId: Copy {
fn new_id() -> Self;
fn u32(&self) -> u32;
fn thread(&self) -> Option<ThreadId>;
}
pub trait Trace: Copy {
type Id: TraceId;
fn label(u32) -> &'static str;
fn tag(&self) -> u32;
}
pub trait TraceSink<T>
where T: Trace
{
fn trace_event(&mut self, trace: T, why: Option<T::Id>) -> T::Id;
fn trace_start(&mut self, trace: T, why: Option<T::Id>) -> T::Id;
fn trace_stop(&mut self, id: T::Id, trace: T);
}