1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
use serde::{Deserialize, Serialize};
/// This object describes the position on faces where a mask should be placed by
/// default.
///
/// [The official docs](https://core.telegram.org/bots/api#maskposition).
#[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct MaskPosition {
/// The part of the face relative to which the mask should be placed. One
/// of `forehead`, `eyes`, `mouth`, or `chin`.
pub point: MaskPoint,
/// Shift by X-axis measured in widths of the mask scaled to the face size,
/// from left to right. For example, choosing `-1.0` will place mask just
/// to the left of the default mask position.
pub x_shift: f64,
/// Shift by Y-axis measured in heights of the mask scaled to the face
/// size, from top to bottom. For example, `1.0` will place the mask just
/// below the default mask position.
pub y_shift: f64,
/// Mask scaling coefficient. For example, `2.0` means double size.
pub scale: f64,
}
/// The part of the face relative to which the mask should be placed.
#[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum MaskPoint {
Forehead,
Eyes,
Mouth,
Chin,
}
impl MaskPosition {
#[must_use]
pub const fn new(point: MaskPoint, x_shift: f64, y_shift: f64, scale: f64) -> Self {
Self { point, x_shift, y_shift, scale }
}
#[must_use]
pub const fn point(mut self, val: MaskPoint) -> Self {
self.point = val;
self
}
#[must_use]
pub const fn x_shift(mut self, val: f64) -> Self {
self.x_shift = val;
self
}
#[must_use]
pub const fn y_shift(mut self, val: f64) -> Self {
self.y_shift = val;
self
}
#[must_use]
pub const fn scale(mut self, val: f64) -> Self {
self.scale = val;
self
}
}