diff --git a/src/asciicast/v2.rs b/src/asciicast/v2.rs index 342615c..00b853c 100644 --- a/src/asciicast/v2.rs +++ b/src/asciicast/v2.rs @@ -181,29 +181,33 @@ impl V2Encoder { } pub fn event(&mut self, event: &Event) -> Vec { - let mut data = self.serialize_event(event).unwrap().into_bytes(); + let mut data = self.serialize_event(event).into_bytes(); data.push(b'\n'); data } - fn serialize_event(&self, event: &Event) -> Result { + fn serialize_event(&self, event: &Event) -> String { use EventData::*; let (code, data) = match &event.data { - Output(data) => ('o', serde_json::to_string(data)?), - Input(data) => ('i', serde_json::to_string(data)?), - Resize(cols, rows) => ('r', serde_json::to_string(&format!("{cols}x{rows}"))?), - Marker(data) => ('m', serde_json::to_string(data)?), - Other(code, data) => (*code, serde_json::to_string(data)?), + Output(data) => ('o', self.to_json_string(data)), + Input(data) => ('i', self.to_json_string(data)), + Resize(cols, rows) => ('r', self.to_json_string(&format!("{cols}x{rows}"))), + Marker(data) => ('m', self.to_json_string(data)), + Other(code, data) => (*code, self.to_json_string(data)), }; - Ok(format!( + format!( "[{}, {}, {}]", format_time(event.time + self.time_offset), - serde_json::to_string(&code)?, + self.to_json_string(&code.to_string()), data, - )) + ) + } + + fn to_json_string(&self, s: &str) -> String { + serde_json::to_string(s).unwrap() } } diff --git a/src/asciicast/v3.rs b/src/asciicast/v3.rs index 6cf652e..9f7510d 100644 --- a/src/asciicast/v3.rs +++ b/src/asciicast/v3.rs @@ -197,32 +197,36 @@ impl V3Encoder { } pub fn event(&mut self, event: &Event) -> Vec { - let mut data = self.serialize_event(event).unwrap().into_bytes(); + let mut data = self.serialize_event(event).into_bytes(); data.push(b'\n'); data } - fn serialize_event(&mut self, event: &Event) -> Result { + fn serialize_event(&mut self, event: &Event) -> String { use EventData::*; let (code, data) = match &event.data { - Output(data) => ('o', serde_json::to_string(data)?), - Input(data) => ('i', serde_json::to_string(data)?), - Resize(cols, rows) => ('r', serde_json::to_string(&format!("{cols}x{rows}"))?), - Marker(data) => ('m', serde_json::to_string(data)?), - Other(code, data) => (*code, serde_json::to_string(data)?), + Output(data) => ('o', self.to_json_string(data)), + Input(data) => ('i', self.to_json_string(data)), + Resize(cols, rows) => ('r', self.to_json_string(&format!("{cols}x{rows}"))), + Marker(data) => ('m', self.to_json_string(data)), + Other(code, data) => (*code, self.to_json_string(data)), }; let time = event.time - self.prev_time; self.prev_time = event.time; - Ok(format!( + format!( "[{}, {}, {}]", format_time(time), - serde_json::to_string(&code)?, + self.to_json_string(&code.to_string()), data, - )) + ) + } + + fn to_json_string(&self, s: &str) -> String { + serde_json::to_string(s).unwrap() } }