use serde::{Deserialize, Serialize};
use crate::ResourceRef;
use crate::ids::{RequestId, Seq, SpanId};
use crate::kind::{EventKind, Phase};
use crate::payload::Payload;
use crate::scope::Scope;
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct TraceEvent {
pub seq: Seq,
pub ts_mono_ns: u64,
pub ts_wall_ns: u64,
pub thread_id: u64,
pub process_id: u64,
pub scope: Scope,
pub kind: EventKind,
pub phase: Phase,
pub span_id: Option<SpanId>,
pub request_id: Option<RequestId>,
pub causes: Vec<u64>,
pub resource: Option<ResourceRef>,
pub payload: Payload,
pub cost_estimate_ns: Option<u64>,
pub confidence: Option<f32>,
}
impl TraceEvent {
#[allow(clippy::too_many_arguments)]
pub fn instant(
seq: Seq,
ts_mono_ns: u64,
ts_wall_ns: u64,
thread_id: u64,
process_id: u64,
scope: Scope,
kind: EventKind,
payload: Payload,
) -> Self {
TraceEvent {
seq,
ts_mono_ns,
ts_wall_ns,
thread_id,
process_id,
scope,
kind,
phase: Phase::Instant,
span_id: None,
request_id: None,
causes: Vec::new(),
resource: None,
payload,
cost_estimate_ns: None,
confidence: None,
}
}
}
#[derive(Clone, Debug, Default)]
pub struct EmitOpts {
pub request_id: Option<RequestId>,
pub causes: Vec<u64>,
pub span_id: Option<SpanId>,
pub resource: Option<ResourceRef>,
pub cost_estimate_ns: Option<u64>,
pub confidence: Option<f32>,
}