Slight refactoring of event serialization

This commit is contained in:
Marcin Kulik
2025-05-29 18:12:04 +02:00
parent 9f18c457ba
commit 0c16f90f8b
2 changed files with 28 additions and 20 deletions

View File

@@ -181,29 +181,33 @@ impl V2Encoder {
} }
pub fn event(&mut self, event: &Event) -> Vec<u8> { pub fn event(&mut self, event: &Event) -> Vec<u8> {
let mut data = self.serialize_event(event).unwrap().into_bytes(); let mut data = self.serialize_event(event).into_bytes();
data.push(b'\n'); data.push(b'\n');
data data
} }
fn serialize_event(&self, event: &Event) -> Result<String, serde_json::Error> { fn serialize_event(&self, event: &Event) -> String {
use EventData::*; use EventData::*;
let (code, data) = match &event.data { let (code, data) = match &event.data {
Output(data) => ('o', serde_json::to_string(data)?), Output(data) => ('o', self.to_json_string(data)),
Input(data) => ('i', serde_json::to_string(data)?), Input(data) => ('i', self.to_json_string(data)),
Resize(cols, rows) => ('r', serde_json::to_string(&format!("{cols}x{rows}"))?), Resize(cols, rows) => ('r', self.to_json_string(&format!("{cols}x{rows}"))),
Marker(data) => ('m', serde_json::to_string(data)?), Marker(data) => ('m', self.to_json_string(data)),
Other(code, data) => (*code, serde_json::to_string(data)?), Other(code, data) => (*code, self.to_json_string(data)),
}; };
Ok(format!( format!(
"[{}, {}, {}]", "[{}, {}, {}]",
format_time(event.time + self.time_offset), format_time(event.time + self.time_offset),
serde_json::to_string(&code)?, self.to_json_string(&code.to_string()),
data, data,
)) )
}
fn to_json_string(&self, s: &str) -> String {
serde_json::to_string(s).unwrap()
} }
} }

View File

@@ -197,32 +197,36 @@ impl V3Encoder {
} }
pub fn event(&mut self, event: &Event) -> Vec<u8> { pub fn event(&mut self, event: &Event) -> Vec<u8> {
let mut data = self.serialize_event(event).unwrap().into_bytes(); let mut data = self.serialize_event(event).into_bytes();
data.push(b'\n'); data.push(b'\n');
data data
} }
fn serialize_event(&mut self, event: &Event) -> Result<String, serde_json::Error> { fn serialize_event(&mut self, event: &Event) -> String {
use EventData::*; use EventData::*;
let (code, data) = match &event.data { let (code, data) = match &event.data {
Output(data) => ('o', serde_json::to_string(data)?), Output(data) => ('o', self.to_json_string(data)),
Input(data) => ('i', serde_json::to_string(data)?), Input(data) => ('i', self.to_json_string(data)),
Resize(cols, rows) => ('r', serde_json::to_string(&format!("{cols}x{rows}"))?), Resize(cols, rows) => ('r', self.to_json_string(&format!("{cols}x{rows}"))),
Marker(data) => ('m', serde_json::to_string(data)?), Marker(data) => ('m', self.to_json_string(data)),
Other(code, data) => (*code, serde_json::to_string(data)?), Other(code, data) => (*code, self.to_json_string(data)),
}; };
let time = event.time - self.prev_time; let time = event.time - self.prev_time;
self.prev_time = event.time; self.prev_time = event.time;
Ok(format!( format!(
"[{}, {}, {}]", "[{}, {}, {}]",
format_time(time), format_time(time),
serde_json::to_string(&code)?, self.to_json_string(&code.to_string()),
data, data,
)) )
}
fn to_json_string(&self, s: &str) -> String {
serde_json::to_string(s).unwrap()
} }
} }