lean_agent_core/
writer.rs1use crate::{Result, TraceRecord};
4use camino::Utf8Path;
5use serde::Serialize;
6use std::fs::File;
7use std::io::{BufWriter, Write};
8
9pub struct TraceWriter {
11 inner: BufWriter<File>,
12}
13
14impl TraceWriter {
15 pub fn create(path: &Utf8Path) -> Result<Self> {
17 let file = File::create(path)?;
18 Ok(Self {
19 inner: BufWriter::new(file),
20 })
21 }
22
23 pub fn write_record(&mut self, record: &TraceRecord) -> Result<()> {
25 serde_json::to_writer(&mut self.inner, record)?;
26 self.inner.write_all(b"\n")?;
27 Ok(())
28 }
29
30 pub fn flush(&mut self) -> Result<()> {
32 self.inner.flush()?;
33 Ok(())
34 }
35}
36
37pub fn write_jsonl(path: &Utf8Path, records: &[TraceRecord]) -> Result<()> {
39 let mut writer = TraceWriter::create(path)?;
40 for record in records {
41 writer.write_record(record)?;
42 }
43 writer.flush()
44}
45
46pub struct JsonlWriter {
51 inner: BufWriter<File>,
52}
53
54impl JsonlWriter {
55 pub fn create(path: &Utf8Path) -> Result<Self> {
57 let file = File::create(path)?;
58 Ok(Self {
59 inner: BufWriter::new(file),
60 })
61 }
62
63 pub fn write_record<T: Serialize>(&mut self, record: &T) -> Result<()> {
65 serde_json::to_writer(&mut self.inner, record)?;
66 self.inner.write_all(b"\n")?;
67 Ok(())
68 }
69
70 pub fn flush(&mut self) -> Result<()> {
72 self.inner.flush()?;
73 Ok(())
74 }
75}