flameshot/params/
screen.rs1#[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 ScreenArgs {
10 number: usize,
11 clipboard: bool,
12 path: Option<String>,
13 delay: Option<usize>,
14 region: Option<(usize, usize, usize, usize)>,
15 raw: bool,
16 upload: bool,
17 pin: bool,
18 pub args: Vec<String>,
19}
20
21impl ScreenArgs {
22 pub fn builder() -> ScreenArgsBuilder {
23 ScreenArgsBuilder::default()
24 }
25}
26
27impl CmdParameters for ScreenArgs {
28 fn generate_args(&self) -> Vec<String> {
29 let mut args = vec![String::from("screen")];
30
31 if self.number != 0 {
32 args.push(format!("--number={}", self.number));
33 }
34
35 if let Some(path) = self.path.to_owned() {
36 args.push(format!("--path={path}"));
37 };
38
39 if self.clipboard {
40 args.push(String::from("--clipboard"));
41 };
42
43 if let Some(delay) = self.delay {
44 args.push(format!("--delay={delay}"));
45 };
46
47 if let Some(region) = self.region {
48 args.push(format!(
49 "--region={},{},{},{}",
50 region.0, region.1, region.2, region.3,
51 ));
52 };
53
54 if self.raw {
55 args.push(String::from("--raw"));
56 };
57 if self.upload {
58 args.push(String::from("--upload"));
59 };
60
61 args
62 }
63}
64
65#[derive(Default)]
66pub struct ScreenArgsBuilder {
67 number: usize,
68 path: Option<String>,
69 clipboard: bool,
70 delay: Option<usize>,
71 region: Option<(usize, usize, usize, usize)>,
72 raw: bool,
73 upload: bool,
74 pin: bool,
75 args: Vec<String>,
76}
77
78impl ScreenArgsBuilder {
79 pub fn number(mut self, number: usize) -> Self {
80 self.number = number;
81 self
82 }
83
84 pub fn path(mut self, path: &str) -> Self {
85 self.path = Some(path.to_string());
86 self
87 }
88
89 pub fn clipboard(mut self) -> Self {
90 self.clipboard = true;
91 self
92 }
93
94 pub fn delay(mut self, delay: usize) -> Self {
95 self.delay = Some(delay);
96 self
97 }
98
99 pub fn region(mut self, region: (usize, usize, usize, usize)) -> Self {
100 self.region = Some(region);
101 self
102 }
103
104 pub fn raw(mut self) -> Self {
105 self.raw = true;
106 self
107 }
108
109 pub fn upload(mut self) -> Self {
110 self.upload = true;
111 self
112 }
113
114 pub fn pin(mut self) -> Self {
115 self.pin = true;
116 self
117 }
118
119 pub fn build(self) -> ScreenArgs {
120 let mut cmd = ScreenArgs {
121 number: self.number,
122 path: self.path,
123 clipboard: self.clipboard,
124 delay: self.delay,
125 region: self.region,
126 raw: self.raw,
127 upload: self.upload,
128 pin: self.pin,
129 args: self.args,
130 };
131 cmd.args = cmd.generate_args();
132
133 cmd
134 }
135}