fix: share protocol frame codec

This commit is contained in:
2026-07-22 14:03:33 +09:00
parent 945716d010
commit b9f4c06c68
8 changed files with 88 additions and 17 deletions
+2 -1
View File
@@ -6,6 +6,7 @@ use worker_runtime::observation::{WorkerObservationCursor, WorkerObservationEven
use axum::http::StatusCode;
use futures::{SinkExt, StreamExt};
use protocol::stream::decode_event;
use serde::{Deserialize, Serialize};
use tokio_tungstenite::connect_async;
use tokio_tungstenite::tungstenite::client::IntoClientRequest;
@@ -284,7 +285,7 @@ impl RuntimeWsObservationClient {
));
}
};
let payload: protocol::Event = serde_json::from_str(&text).map_err(|error| {
let payload: protocol::Event = decode_event(&text).map_err(|error| {
ObservationProxyError::MalformedFrame(format!(
"failed to decode runtime protocol event frame: {error}"
))
+4 -3
View File
@@ -15,6 +15,7 @@ use futures::{SinkExt, StreamExt};
use memory::backend::{
MemoryBackendHttpResponse, MemoryBackendOperation, execute_memory_backend_operation,
};
use protocol::stream::{decode_method, encode_event};
use serde::{Deserialize, Serialize};
use sha2::{Digest, Sha256};
use ticket::{
@@ -3561,7 +3562,7 @@ async fn embedded_worker_protocol_ws_session(
tokio::select! {
inbound = socket.next() => {
match inbound {
Some(Ok(WsMessage::Text(text))) => match serde_json::from_str::<protocol::Method>(&text) {
Some(Ok(WsMessage::Text(text))) => match decode_method(&text) {
Ok(method) => match source.runtime.send_protocol_method(&source.worker_ref, method) {
Ok(events) => {
for event in events {
@@ -3617,13 +3618,13 @@ async fn embedded_worker_protocol_ws_session(
}
}
async fn send_protocol_event(socket: &mut WebSocket, event: &protocol::Event) -> bool {
match serde_json::to_string(event) {
match encode_event(event) {
Ok(text) => socket.send(WsMessage::Text(text.into())).await.is_ok(),
Err(error) => {
let fallback = protocol_error_event(format!(
"failed to serialize protocol response event: {error}"
));
let Ok(text) = serde_json::to_string(&fallback) else {
let Ok(text) = encode_event(&fallback) else {
return false;
};
socket.send(WsMessage::Text(text.into())).await.is_ok()