1#[cfg(feature = "serde")]
2use serde::{Deserialize, Serialize};
3
4use crate::CmdParameters;
5
6#[derive(Clone, Debug, Eq, PartialEq, PartialOrd, Hash, Ord)]
7#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
8pub struct FullArgs {
10 path: Option<String>,
11 clipboard: bool,
12 delay: Option<usize>,
13 region: Option<(usize, usize, usize, usize)>,
14 raw: bool,
15 upload: bool,
16 pub args: Vec<String>,
17}
18
19impl FullArgs {
20 pub fn builder() -> FullArgsBuilder {
21 FullArgsBuilder::default()
22 }
23}
24
25impl CmdParameters for FullArgs {
26 fn generate_args(&self) -> Vec<String> {
27 let mut args = vec![String::from("full")];
28 if let Some(path) = self.path.to_owned() {
29 args.push(format!("--path={path}"));
30 };
31
32 if self.clipboard {
33 args.push(String::from("--clipboard"));
34 };
35
36 if let Some(delay) = self.delay {
37 args.push(format!("--delay={delay}"));
38 };
39
40 if let Some(region) = self.region {
41 args.push(format!(
42 "--region={},{},{},{}",
43 region.0, region.1, region.2, region.3,
44 ));
45 };
46
47 if self.raw {
48 args.push(String::from("--raw"));
49 };
50 if self.upload {
51 args.push(String::from("--upload"));
52 };
53
54 args
55 }
56}
57
58#[derive(Default)]
59pub struct FullArgsBuilder {
60 path: Option<String>,
61 clipboard: bool,
62 delay: Option<usize>,
63 region: Option<(usize, usize, usize, usize)>,
64 raw: bool,
65 upload: bool,
66 args: Vec<String>,
67}
68
69impl FullArgsBuilder {
70 pub fn path(mut self, path: &str) -> Self {
71 self.path = Some(path.to_string());
72 self
73 }
74
75 pub fn clipboard(mut self) -> Self {
76 self.clipboard = true;
77 self
78 }
79
80 pub fn delay(mut self, delay: usize) -> Self {
81 self.delay = Some(delay);
82 self
83 }
84
85 pub fn region(mut self, region: (usize, usize, usize, usize)) -> Self {
86 self.region = Some(region);
87 self
88 }
89
90 pub fn raw(mut self) -> Self {
91 self.raw = true;
92 self
93 }
94
95 pub fn upload(mut self) -> Self {
96 self.upload = true;
97 self
98 }
99
100 pub fn build(self) -> FullArgs {
101 let mut cmd = FullArgs {
102 path: self.path,
103 clipboard: self.clipboard,
104 delay: self.delay,
105 region: self.region,
106 raw: self.raw,
107 upload: self.upload,
108 args: self.args,
109 };
110 cmd.args = cmd.generate_args();
111
112 cmd
113 }
114}