sakurs_cli/output/
json.rs1use super::OutputFormatter;
4use anyhow::Result;
5use serde::{Deserialize, Serialize};
6use std::io::Write;
7
8pub struct JsonFormatter<W: Write> {
10 writer: W,
11 sentences: Vec<SentenceData>,
12}
13
14#[derive(Debug, Serialize, Deserialize)]
16pub struct SentenceData {
17 pub text: String,
19 pub offset: usize,
21 pub length: usize,
23}
24
25impl<W: Write> JsonFormatter<W> {
26 pub fn new(writer: W) -> Self {
28 Self {
29 writer,
30 sentences: Vec::new(),
31 }
32 }
33}
34
35impl<W: Write + Send + Sync> OutputFormatter for JsonFormatter<W> {
36 fn format_sentence(&mut self, sentence: &str, offset: usize) -> Result<()> {
37 self.sentences.push(SentenceData {
38 text: sentence.trim().to_string(),
39 offset,
40 length: sentence.len(),
41 });
42 Ok(())
43 }
44
45 fn finish(&mut self) -> Result<()> {
46 serde_json::to_writer_pretty(&mut self.writer, &self.sentences)?;
47 writeln!(self.writer)?;
48 self.writer.flush()?;
49 Ok(())
50 }
51}