#[derive(Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize, prost::Message)]
pub struct ProtoLoadPackageRequest {
#[prost(bytes = "vec", tag = "1")]
pub archive: Vec<u8>,
}
#[derive(Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize, prost::Message)]
pub struct ProtoLoadPackageResponse {
#[prost(string, tag = "1")]
pub workflow_type: String,
#[prost(string, tag = "2")]
pub content_hash: String,
#[prost(string, tag = "3")]
pub deployed_entry_module: String,
#[prost(string, tag = "4")]
pub entry_function: String,
#[prost(bool, tag = "5")]
pub freshly_loaded: bool,
#[prost(bool, tag = "6")]
pub route_changed: bool,
}
#[derive(Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize, prost::Message)]
pub struct ProtoListVersionsRequest {}
#[derive(Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize, prost::Message)]
pub struct ProtoWorkflowVersion {
#[prost(string, tag = "1")]
pub workflow_type: String,
#[prost(string, tag = "2")]
pub content_hash: String,
#[prost(string, tag = "3")]
pub deployed_entry_module: String,
#[prost(string, tag = "4")]
pub entry_function: String,
#[prost(string, tag = "5")]
pub manifest_version: String,
#[prost(string, tag = "6")]
pub loaded_at: String,
#[prost(bool, tag = "7")]
pub route_active: bool,
}
#[derive(Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize, prost::Message)]
pub struct ProtoListVersionsResponse {
#[prost(message, repeated, tag = "1")]
pub versions: Vec<ProtoWorkflowVersion>,
}
#[derive(Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize, prost::Message)]
pub struct ProtoRouteVersionRequest {
#[prost(string, tag = "1")]
pub workflow_type: String,
#[prost(string, tag = "2")]
pub content_hash: String,
}
#[derive(Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize, prost::Message)]
pub struct ProtoRouteVersionResponse {}
#[derive(Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize, prost::Message)]
pub struct ProtoUnloadVersionRequest {
#[prost(string, tag = "1")]
pub workflow_type: String,
#[prost(string, tag = "2")]
pub content_hash: String,
}
#[derive(Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize, prost::Message)]
pub struct ProtoUnloadVersionResponse {}
#[cfg(test)]
mod tests {
use super::{ProtoLoadPackageResponse, ProtoRouteVersionRequest, ProtoWorkflowVersion};
#[test]
fn deploy_shapes_round_trip_through_json() -> Result<(), serde_json::Error> {
let response = ProtoLoadPackageResponse {
workflow_type: "order".to_owned(),
content_hash: "a".repeat(64),
deployed_entry_module: format!("order${}", "a".repeat(64)),
entry_function: "run".to_owned(),
freshly_loaded: true,
route_changed: true,
};
let decoded: ProtoLoadPackageResponse =
serde_json::from_str(&serde_json::to_string(&response)?)?;
assert_eq!(decoded, response);
let route = ProtoRouteVersionRequest {
workflow_type: "order".to_owned(),
content_hash: "b".repeat(64),
};
let decoded: ProtoRouteVersionRequest =
serde_json::from_str(&serde_json::to_string(&route)?)?;
assert_eq!(decoded, route);
let version = ProtoWorkflowVersion {
workflow_type: "order".to_owned(),
content_hash: "c".repeat(64),
deployed_entry_module: format!("order${}", "c".repeat(64)),
entry_function: "run".to_owned(),
manifest_version: "c".repeat(64),
loaded_at: "2026-06-12T00:00:00Z".to_owned(),
route_active: false,
};
let decoded: ProtoWorkflowVersion =
serde_json::from_str(&serde_json::to_string(&version)?)?;
assert_eq!(decoded, version);
Ok(())
}
}