pueue_lib/message/
response.rs1use std::collections::BTreeMap;
2
3use chrono::prelude::*;
4use serde::{Deserialize, Serialize};
5
6use crate::{
7 message::EditableTask,
8 state::{Group, State},
9 task::Task,
10};
11
12#[macro_export]
14macro_rules! success_msg {
15 ($($arg:tt)*) => {{
16 create_success_response(format!($($arg)*))
17 }}
18}
19
20#[macro_export]
22macro_rules! failure_msg {
23 ($($arg:tt)*) => {{
24 create_failure_response(format!($($arg)*))
25 }}
26}
27
28pub fn create_success_response<T: ToString>(text: T) -> Response {
29 Response::Success(text.to_string())
30}
31
32pub fn create_failure_response<T: ToString>(text: T) -> Response {
33 Response::Failure(text.to_string())
34}
35
36macro_rules! impl_into_response {
40 ($inner:ty, $variant:expr) => {
41 impl From<$inner> for Response {
42 fn from(message: $inner) -> Self {
43 $variant(message)
44 }
45 }
46 };
47}
48
49#[derive(PartialEq, Eq, Clone, Debug, Deserialize, Serialize)]
52pub enum Response {
53 AddedTask(AddedTaskResponse),
54
55 Edit(Vec<EditableTask>),
57
58 Status(Box<State>),
59
60 Log(BTreeMap<usize, TaskLogResponse>),
63
64 Group(GroupResponse),
65
66 Stream(StreamResponse),
68
69 Success(String),
70 Failure(String),
71
72 Close,
75}
76
77impl Response {
78 pub fn success(&self) -> bool {
79 matches!(&self, Self::AddedTask(_) | Self::Success(_))
80 }
81}
82
83#[derive(PartialEq, Eq, Clone, Debug, Default, Deserialize, Serialize)]
84pub struct AddedTaskResponse {
85 pub task_id: usize,
86 pub enqueue_at: Option<DateTime<Local>>,
87 pub group_is_paused: bool,
88}
89impl_into_response!(AddedTaskResponse, Response::AddedTask);
90
91#[derive(PartialEq, Eq, Clone, Deserialize, Serialize)]
93pub struct TaskLogResponse {
94 pub task: Task,
95 pub output_complete: bool,
97 pub output: Option<Vec<u8>>,
98}
99impl_into_response!(BTreeMap<usize, TaskLogResponse>, Response::Log);
100
101impl std::fmt::Debug for TaskLogResponse {
104 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
105 f.debug_struct("TaskLogResponse")
106 .field("task", &self.task)
107 .field("output_complete", &self.output_complete)
108 .field("output", &"hidden")
109 .finish()
110 }
111}
112
113#[derive(PartialEq, Eq, Clone, Debug, Deserialize, Serialize)]
115pub struct GroupResponse {
116 pub groups: BTreeMap<String, Group>,
117}
118impl_into_response!(GroupResponse, Response::Group);
119
120#[derive(PartialEq, Eq, Clone, Debug, Deserialize, Serialize)]
124pub struct StreamResponse {
125 pub logs: BTreeMap<usize, String>,
126}
127impl_into_response!(StreamResponse, Response::Stream);