1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
use anyhow::Error; use postgres_types::{FromSql, ToSql}; use serde_derive::{Deserialize, Serialize}; use serde_json::Value; use tmq::{Message, Multipart}; use uuid::Uuid; pub mod db; pub mod server; pub mod worker; #[derive(Serialize, Deserialize, Debug)] pub enum ServerMessage { Hello, Request(JobRequest), Completed(Job), Failed(Job, String), } #[derive(Serialize, Deserialize, Debug)] pub enum ClientMessage { Hello, Acknowledged(Job), } #[derive(Serialize, Deserialize, Debug)] pub enum WorkerMessage { Hello, Order(Job), } #[derive(Serialize, Deserialize, Debug)] pub struct JobRequest { pub name: String, pub username: String, pub uuid: Uuid, pub params: Value, pub priority: Priority, } #[derive(Serialize, Deserialize, Debug, Clone)] pub struct Job { pub id: i64, pub username: String, pub name: String, pub uuid: Uuid, pub params: Value, pub priority: Priority, pub status: Status, } #[derive(Serialize, Deserialize, Debug, Clone, ToSql, FromSql)] pub enum Status { Queued, Processing, Completed, Failed, } #[derive(Serialize, Deserialize, Debug, Clone, ToSql, FromSql)] pub enum Priority { High, Normal, Low, } pub trait ToMpart { fn to_mpart(&self) -> Result<Multipart, Error>; fn to_msg(&self) -> Result<Message, Error>; } impl<T: serde::ser::Serialize> ToMpart for T { fn to_mpart(&self) -> Result<Multipart, Error> { let bytes = serde_cbor::to_vec(&self)?; Ok(Multipart::from(vec![&bytes])) } fn to_msg(&self) -> Result<Message, Error> { let bytes = serde_cbor::to_vec(&self)?; Ok(Message::from(&bytes)) } }