flameshot/params/
full.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 full capture
9pub 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}