1mod perfetto;
2mod stdout;
3mod tracer;
4
5use std::{fs, io, path::PathBuf};
6
7pub use perfetto::PerfettoTracer;
8pub use stdout::StdoutTracer;
9pub use tracer::{TraceEvent, Tracer};
10use tracing_subscriber::fmt::writer::BoxMakeWriter;
11pub(crate) enum TraceWriter {
12 Stdout,
13 Stderr,
14 File { path: PathBuf },
15}
16
17impl From<String> for TraceWriter {
18 fn from(s: String) -> Self {
19 match s.as_str() {
20 "stdout" => Self::Stdout,
21 "stderr" => Self::Stderr,
22 _ => Self::File { path: s.into() },
23 }
24 }
25}
26
27impl TraceWriter {
28 pub fn make_writer(&self) -> BoxMakeWriter {
29 match self {
30 TraceWriter::Stdout => BoxMakeWriter::new(io::stdout),
31 TraceWriter::Stderr => BoxMakeWriter::new(io::stderr),
32 TraceWriter::File { path } => {
33 BoxMakeWriter::new(fs::File::create(path).expect("Failed to create trace file"))
34 }
35 }
36 }
37}