use crate::{
stats::BrokerStatistics, ArtifactUploadLocation, ClientJobId, JobBrokerStatus, JobId,
JobOutcomeResult, JobSpec, JobWorkerStatus, Sha256Digest,
};
use bincode::Options;
use serde::{Deserialize, Serialize};
#[derive(Clone, PartialEq, Eq, Serialize, Deserialize, Debug)]
pub enum Hello {
Client,
Worker { slots: u32 },
Monitor,
ArtifactPusher,
ArtifactFetcher,
}
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
#[allow(clippy::large_enum_variant)]
pub enum BrokerToWorker {
EnqueueJob(JobId, JobSpec),
CancelJob(JobId),
}
#[derive(Clone, Debug, Deserialize, PartialEq, Eq, PartialOrd, Ord, Serialize)]
pub enum WorkerToBroker {
JobResponse(JobId, JobOutcomeResult),
JobStatusUpdate(JobId, JobWorkerStatus),
}
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
pub enum BrokerToClient {
JobResponse(ClientJobId, JobOutcomeResult),
JobStatusUpdate(ClientJobId, JobBrokerStatus),
TransferArtifact(Sha256Digest),
GeneralError(String),
}
#[allow(clippy::large_enum_variant)]
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
pub enum ClientToBroker {
JobRequest(ClientJobId, JobSpec),
ArtifactTransferred(Sha256Digest, ArtifactUploadLocation),
}
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
pub enum BrokerToMonitor {
StatisticsResponse(BrokerStatistics),
}
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
pub enum MonitorToBroker {
StatisticsRequest,
StopRequest,
}
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
pub struct BrokerToArtifactFetcher(pub Result<u64, String>);
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
pub struct ArtifactFetcherToBroker(pub Sha256Digest);
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
pub struct BrokerToArtifactPusher(pub Result<(), String>);
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
pub struct ArtifactPusherToBroker(pub Sha256Digest, pub u64);
fn bincode() -> impl Options {
bincode::options().with_big_endian()
}
pub fn serialize<T: ?Sized + Serialize>(value: &T) -> bincode::Result<Vec<u8>> {
bincode().serialize(value)
}
pub fn serialize_into<W: std::io::Write, T: ?Sized + Serialize>(
writer: W,
value: &T,
) -> bincode::Result<()> {
bincode().serialize_into(writer, value)
}
pub fn serialized_size<T: ?Sized + Serialize>(value: &T) -> bincode::Result<u64> {
bincode().serialized_size(value)
}
pub fn deserialize<'a, T: Deserialize<'a>>(bytes: &'a [u8]) -> bincode::Result<T> {
bincode().deserialize(bytes)
}