1use crate::{
4 stats::BrokerStatistics, ArtifactUploadLocation, ClientJobId, JobBrokerStatus, JobId,
5 JobOutcomeResult, JobSpec, JobWorkerStatus, Sha256Digest,
6};
7use bincode::Options;
8use serde::{Deserialize, Serialize};
9
10#[derive(Clone, PartialEq, Eq, Serialize, Deserialize, Debug)]
13pub enum Hello {
14 Client,
15 Worker { slots: u32 },
16 Monitor,
17 ArtifactPusher,
18 ArtifactFetcher,
19}
20
21#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
24#[allow(clippy::large_enum_variant)]
25pub enum BrokerToWorker {
26 EnqueueJob(JobId, JobSpec),
27 CancelJob(JobId),
28}
29
30#[derive(Clone, Debug, Deserialize, PartialEq, Eq, PartialOrd, Ord, Serialize)]
34pub enum WorkerToBroker {
35 JobResponse(JobId, JobOutcomeResult),
36 JobStatusUpdate(JobId, JobWorkerStatus),
37}
38
39#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
42pub enum BrokerToClient {
43 JobResponse(ClientJobId, JobOutcomeResult),
44 JobStatusUpdate(ClientJobId, JobBrokerStatus),
45 TransferArtifact(Sha256Digest),
46 GeneralError(String),
47}
48
49#[allow(clippy::large_enum_variant)]
52#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
53pub enum ClientToBroker {
54 JobRequest(ClientJobId, JobSpec),
55 ArtifactTransferred(Sha256Digest, ArtifactUploadLocation),
56}
57
58#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
61pub enum BrokerToMonitor {
62 StatisticsResponse(BrokerStatistics),
64}
65
66#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
69pub enum MonitorToBroker {
70 StatisticsRequest,
72
73 StopRequest,
76}
77
78#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
83pub struct BrokerToArtifactFetcher(pub Result<u64, String>);
84
85#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
88pub struct ArtifactFetcherToBroker(pub Sha256Digest);
89
90#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
96pub struct BrokerToArtifactPusher(pub Result<(), String>);
97
98#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
102pub struct ArtifactPusherToBroker(pub Sha256Digest, pub u64);
103
104fn bincode() -> impl Options {
105 bincode::options().with_big_endian()
106}
107
108pub fn serialize<T: ?Sized + Serialize>(value: &T) -> bincode::Result<Vec<u8>> {
109 bincode().serialize(value)
110}
111
112pub fn serialize_into<W: std::io::Write, T: ?Sized + Serialize>(
113 writer: W,
114 value: &T,
115) -> bincode::Result<()> {
116 bincode().serialize_into(writer, value)
117}
118
119pub fn serialized_size<T: ?Sized + Serialize>(value: &T) -> bincode::Result<u64> {
120 bincode().serialized_size(value)
121}
122
123pub fn deserialize<'a, T: Deserialize<'a>>(bytes: &'a [u8]) -> bincode::Result<T> {
124 bincode().deserialize(bytes)
125}