mirror of
https://github.com/nukesor/pueue
synced 2024-10-03 06:23:55 +00:00
162 lines
3.9 KiB
Rust
162 lines
3.9 KiB
Rust
use ::chrono::prelude::*;
|
|
use ::serde_derive::{Deserialize, Serialize};
|
|
use ::std::collections::{BTreeMap, HashMap};
|
|
|
|
use crate::state::State;
|
|
use crate::task::Task;
|
|
|
|
/// The Message used to add a new command to the daemon.
|
|
#[derive(Clone, Debug, Deserialize, Serialize)]
|
|
pub enum Message {
|
|
Add(AddMessage),
|
|
Remove(Vec<usize>),
|
|
Switch(SwitchMessage),
|
|
Stash(Vec<usize>),
|
|
Enqueue(EnqueueMessage),
|
|
|
|
Start(StartMessage),
|
|
Restart(RestartMessage),
|
|
Pause(PauseMessage),
|
|
Kill(KillMessage),
|
|
|
|
Send(SendMessage),
|
|
EditRequest(usize),
|
|
EditResponse(EditResponseMessage),
|
|
Edit(EditMessage),
|
|
Group(GroupMessage),
|
|
|
|
Status,
|
|
StatusResponse(State),
|
|
Log(LogRequestMessage),
|
|
LogResponse(BTreeMap<usize, TaskLogMessage>),
|
|
Stream(String),
|
|
StreamRequest(StreamRequestMessage),
|
|
Reset,
|
|
Clean,
|
|
DaemonShutdown,
|
|
|
|
Success(String),
|
|
Failure(String),
|
|
|
|
Parallel(ParallelMessage),
|
|
}
|
|
|
|
#[derive(Clone, Debug, Deserialize, Serialize)]
|
|
pub struct AddMessage {
|
|
pub command: String,
|
|
pub path: String,
|
|
pub envs: HashMap<String, String>,
|
|
pub start_immediately: bool,
|
|
pub stashed: bool,
|
|
pub group: Option<String>,
|
|
pub enqueue_at: Option<DateTime<Local>>,
|
|
pub dependencies: Vec<usize>,
|
|
}
|
|
|
|
#[derive(Clone, Debug, Deserialize, Serialize)]
|
|
pub struct SwitchMessage {
|
|
pub task_id_1: usize,
|
|
pub task_id_2: usize,
|
|
}
|
|
|
|
#[derive(Clone, Debug, Deserialize, Serialize)]
|
|
pub struct EnqueueMessage {
|
|
pub task_ids: Vec<usize>,
|
|
pub enqueue_at: Option<DateTime<Local>>,
|
|
}
|
|
|
|
#[derive(Clone, Debug, Deserialize, Serialize)]
|
|
pub struct RestartMessage {
|
|
pub task_ids: Vec<usize>,
|
|
pub start_immediately: bool,
|
|
pub stashed: bool,
|
|
}
|
|
|
|
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
|
|
pub struct StartMessage {
|
|
pub task_ids: Vec<usize>,
|
|
pub group: Option<String>,
|
|
pub all: bool,
|
|
}
|
|
|
|
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
|
|
pub struct PauseMessage {
|
|
pub task_ids: Vec<usize>,
|
|
pub group: Option<String>,
|
|
pub wait: bool,
|
|
pub all: bool,
|
|
}
|
|
|
|
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
|
|
pub struct KillMessage {
|
|
pub task_ids: Vec<usize>,
|
|
pub group: Option<String>,
|
|
pub default: bool,
|
|
pub all: bool,
|
|
}
|
|
|
|
#[derive(Clone, Debug, Deserialize, Serialize)]
|
|
pub struct SendMessage {
|
|
pub task_id: usize,
|
|
pub input: String,
|
|
}
|
|
|
|
#[derive(Clone, Debug, Deserialize, Serialize)]
|
|
pub struct EditMessage {
|
|
pub task_id: usize,
|
|
pub command: String,
|
|
pub path: String,
|
|
}
|
|
|
|
#[derive(Clone, Debug, Deserialize, Serialize)]
|
|
pub struct EditResponseMessage {
|
|
pub task_id: usize,
|
|
pub command: String,
|
|
pub path: String,
|
|
}
|
|
|
|
#[derive(Clone, Debug, Deserialize, Serialize)]
|
|
pub struct GroupMessage {
|
|
pub add: Option<String>,
|
|
pub remove: Option<String>,
|
|
}
|
|
|
|
/// `err` decides, whether you should stream stderr or stdout.
|
|
#[derive(Clone, Debug, Deserialize, Serialize)]
|
|
pub struct StreamRequestMessage {
|
|
pub task_id: usize,
|
|
pub err: bool,
|
|
}
|
|
|
|
/// Request logs for specific tasks.
|
|
/// An empty task_id vector will return logs of all tasks.
|
|
/// If send_logs is false, the daemon won't send the logs
|
|
/// and the client will read logs from the local disk.
|
|
#[derive(Clone, Debug, Deserialize, Serialize)]
|
|
pub struct LogRequestMessage {
|
|
pub task_ids: Vec<usize>,
|
|
pub send_logs: bool,
|
|
}
|
|
|
|
/// Helper struct for sending tasks and their log output to the client.
|
|
#[derive(Clone, Debug, Deserialize, Serialize)]
|
|
pub struct TaskLogMessage {
|
|
pub task: Task,
|
|
pub stdout: Option<Vec<u8>>,
|
|
pub stderr: Option<Vec<u8>>,
|
|
}
|
|
|
|
#[derive(Clone, Debug, Deserialize, Serialize)]
|
|
pub struct ParallelMessage {
|
|
pub parallel_tasks: usize,
|
|
pub group: Option<String>,
|
|
}
|
|
|
|
pub fn create_success_message<T: ToString>(text: T) -> Message {
|
|
Message::Success(text.to_string())
|
|
}
|
|
|
|
pub fn create_failure_message<T: ToString>(text: T) -> Message {
|
|
Message::Failure(text.to_string())
|
|
}
|