Skip to main content

forge_worker_sdk/protocol/
envelope.rs

1//! Wire envelopes aligned with the Go supervisor (`go/transport`).
2//!
3//! **Events** must serialize as three fields: `type`, `job_id`, and nested `payload`
4//! (not a flattened body), so `transport.Conn` can fill `Event.RawBody` correctly.
5
6use serde::{Deserialize, Serialize};
7use serde_json::Value;
8
9/// Go: `wireRequest` — method string + optional params map/struct.
10#[derive(Debug, Clone, Serialize, Deserialize)]
11pub struct WireRequest {
12    pub id: String,
13    pub method: String,
14    #[serde(default, skip_serializing_if = "Option::is_none")]
15    pub params: Option<Value>,
16}
17
18/// Go: `wireResponse`.
19#[derive(Debug, Clone, Serialize, Deserialize)]
20pub struct WireResponse {
21    pub id: String,
22    pub ok: bool,
23    #[serde(default, skip_serializing_if = "Option::is_none")]
24    pub error: Option<super::ErrorPayload>,
25    #[serde(default, skip_serializing_if = "Option::is_none")]
26    pub payload: Option<Value>,
27}
28
29/// Go: `wireEvent` — inner job data lives under `payload`.
30#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
31pub struct WireEvent {
32    #[serde(rename = "type")]
33    pub event_type: String,
34    pub job_id: String,
35    #[serde(default, skip_serializing_if = "Option::is_none")]
36    pub payload: Option<Value>,
37}