party_run/parser/
toml_command.rs1use serde::{Deserialize, Serialize};
3
4use crate::party_command::PartyCommand;
5
6#[derive(Serialize, Deserialize, Debug)]
8pub struct Task {
9 pub command: Vec<String>,
11
12 pub parallel: Option<bool>,
14}
15
16#[derive(Serialize, Deserialize, Debug)]
18pub struct Tasks {
19 pub tasks: Vec<Task>,
21}
22
23impl From<PartyCommand> for Task {
24 fn from(mut value: PartyCommand) -> Self {
25 let mut command = vec![value.command];
26 command.append(&mut value.args);
27
28 let parallel = value.is_parallel.then_some(true);
30
31 Self { command, parallel }
32 }
33}
34
35#[cfg(test)]
36mod tests {
37 use super::Tasks;
38
39 #[test]
40 fn test_parse_toml() {
41 let toml = "
43 [[tasks]]
44 command = [\"cargo\", \"fmt\"]
45 parallel = false
46
47 [[tasks]]
48 command = [\"cargo\", \"clippy\", \"--\", \"-Dwarnings\"]
49 parallel = true
50
51 [[tasks]]
52 command = [\"cargo\", \"test\"]
53 ";
54
55 let tasks: Result<Tasks, toml::de::Error> = toml::from_str(&toml);
57
58 assert!(tasks.is_ok());
60 let tasks = tasks.unwrap();
61
62 assert_eq!(tasks.tasks.len(), 3);
63
64 assert_eq!(tasks.tasks[0].command.len(), 2);
65 assert!(tasks.tasks[0].parallel.is_some_and(|x| !x));
66
67 assert_eq!(tasks.tasks[1].command.len(), 4);
68 assert!(tasks.tasks[1].parallel.is_some_and(|x| x));
69
70 assert_eq!(tasks.tasks[2].command.len(), 2);
71 assert!(tasks.tasks[2].parallel.is_none());
72 }
73}