Line data Source code
1 : use bytes::Bytes;
2 : use camino::Utf8PathBuf;
3 : use std::{
4 : fs::{create_dir_all, File},
5 : io::{BufWriter, Write},
6 : };
7 :
8 : pub struct Tracer {
9 : writer: BufWriter<File>,
10 : }
11 :
12 : impl Drop for Tracer {
13 4 : fn drop(&mut self) {
14 4 : self.flush()
15 4 : }
16 : }
17 :
18 : impl Tracer {
19 4 : pub fn new(path: Utf8PathBuf) -> Self {
20 4 : let parent = path.parent().expect("failed to parse parent path");
21 4 : create_dir_all(parent).expect("failed to create trace dir");
22 4 :
23 4 : let file = File::create(path).expect("failed to create trace file");
24 4 : Tracer {
25 4 : writer: BufWriter::new(file),
26 4 : }
27 4 : }
28 :
29 316 : pub fn trace(&mut self, msg: &Bytes) {
30 316 : self.writer.write_all(msg).expect("failed to write trace");
31 316 : }
32 :
33 4 : pub fn flush(&mut self) {
34 4 : self.writer.flush().expect("failed to flush trace file");
35 4 : }
36 : }
|