chore: replace bincode serialization with protobuf for collab stream (#715)

This commit is contained in:
Khor Shu Heng 2024-08-05 23:44:34 +08:00 committed by GitHub
parent 21bbfa828e
commit bb1c93b98a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 9 additions and 12 deletions

View File

@ -6,6 +6,7 @@ use std::ops::Deref;
use std::str::FromStr; use std::str::FromStr;
use crate::error::{internal, StreamError}; use crate::error::{internal, StreamError};
use prost::Message;
use redis::streams::StreamId; use redis::streams::StreamId;
use redis::{FromRedisValue, RedisError, RedisResult, Value}; use redis::{FromRedisValue, RedisError, RedisResult, Value};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
@ -327,8 +328,8 @@ impl CollabUpdateEvent {
} }
} }
pub fn encode(&self) -> Result<Vec<u8>, bincode::Error> { pub fn encode(&self) -> Vec<u8> {
bincode::serialize(self) self.to_proto().encode_to_vec()
} }
pub fn decode(data: &[u8]) -> Result<Self, StreamError> { pub fn decode(data: &[u8]) -> Result<Self, StreamError> {
@ -346,14 +347,13 @@ impl TryFrom<CollabUpdateEvent> for StreamBinary {
type Error = StreamError; type Error = StreamError;
fn try_from(value: CollabUpdateEvent) -> Result<Self, Self::Error> { fn try_from(value: CollabUpdateEvent) -> Result<Self, Self::Error> {
let raw_data = value.encode()?; let raw_data = value.encode();
Ok(StreamBinary(raw_data)) Ok(StreamBinary(raw_data))
} }
} }
#[cfg(test)] #[cfg(test)]
mod test { mod test {
use prost::Message;
#[test] #[test]
fn test_collab_update_event_decoding() { fn test_collab_update_event_decoding() {
@ -361,11 +361,8 @@ mod test {
let event = super::CollabUpdateEvent::UpdateV1 { let event = super::CollabUpdateEvent::UpdateV1 {
encode_update: encoded_update.clone(), encode_update: encoded_update.clone(),
}; };
let bincode_encoded = event.encode().unwrap(); let encoded = event.encode();
let protobuf_encoded = event.to_proto().encode_to_vec(); let decoded = super::CollabUpdateEvent::decode(&encoded).unwrap();
let decoded_from_bincode = super::CollabUpdateEvent::decode(&bincode_encoded).unwrap(); assert_eq!(event, decoded);
let decoded_from_protobuf = super::CollabUpdateEvent::decode(&protobuf_encoded).unwrap();
assert_eq!(event, decoded_from_bincode);
assert_eq!(event, decoded_from_protobuf);
} }
} }

View File

@ -93,8 +93,8 @@ impl ToRedisArgs for PubSubMessage {
where where
W: ?Sized + RedisWrite, W: ?Sized + RedisWrite,
{ {
let json = bincode::serialize(self).unwrap(); let proto = self.to_proto().encode_to_vec();
json.write_redis_args(out); proto.write_redis_args(out);
} }
} }