fix: serialize uuid as string when sending

This commit is contained in:
zaaarf 2024-02-01 03:19:27 +01:00
parent 97061524e7
commit 164e9887b8
3 changed files with 7 additions and 8 deletions

View file

@ -6,5 +6,5 @@ package user;
// payload identifying user // payload identifying user
message UserIdentity { message UserIdentity {
// user identifier // user identifier
required bytes id = 1; //since uuid is 8 bytes we prefer to just send the raw bytes instead of string required string id = 1;
} }

View file

@ -57,7 +57,7 @@ impl Controller<CursorEvent> for CursorController {
std::mem::swap(&mut cursor.start, &mut cursor.end); std::mem::swap(&mut cursor.start, &mut cursor.end);
} }
Ok(self.op.send(CursorEvent { Ok(self.op.send(CursorEvent {
user: UserIdentity { id: self.user_id.as_bytes().to_vec() }, user: UserIdentity { id: self.user_id.to_string() },
position: cursor, position: cursor,
})?) })?)
} }

View file

@ -1,4 +1,4 @@
use std::{collections::{BTreeMap, BTreeSet}, sync::Arc}; use std::{collections::{BTreeMap, BTreeSet}, str::FromStr, sync::Arc};
use tokio::sync::mpsc; use tokio::sync::mpsc;
use uuid::Uuid; use uuid::Uuid;
use crate::{ use crate::{
@ -25,8 +25,7 @@ impl From<Uuid> for UserInfo {
impl From<UserIdentity> for Uuid { impl From<UserIdentity> for Uuid {
fn from(uid: UserIdentity) -> Uuid { fn from(uid: UserIdentity) -> Uuid {
let b: [u8; 16] = uid.id.try_into().expect("expected an uuid"); Uuid::from_str(&uid.id).expect("expected an uuid")
Uuid::from_bytes(b)
} }
} }
@ -89,9 +88,9 @@ impl Workspace {
/// [crate::api::Controller::recv] to exchange [crate::api::TextChange] /// [crate::api::Controller::recv] to exchange [crate::api::TextChange]
pub async fn attach(&mut self, path: &str) -> crate::Result<Arc<buffer::Controller>> { pub async fn attach(&mut self, path: &str) -> crate::Result<Arc<buffer::Controller>> {
let mut worskspace_client = self.services.workspace.clone(); let mut worskspace_client = self.services.workspace.clone();
self.token.send(worskspace_client.attach( let mut request = tonic::Request::new(AttachRequest { path: path.to_string() });
tonic::Request::new(AttachRequest { path: path.to_string() }) request.metadata_mut().insert("path", tonic::metadata::MetadataValue::try_from(path).expect("could not represent path as byte sequence"));
).await?.into_inner())?; self.token.send(worskspace_client.attach(request).await?.into_inner())?;
let (tx, rx) = mpsc::channel(10); let (tx, rx) = mpsc::channel(10);
let stream = self.services.buffer.clone() let stream = self.services.buffer.clone()