flameshot/params/
screen.rs

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))]
8/// Allows to build parameters for flameshot screen capture
9pub 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}