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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
use crate::types::{photo_size::PhotoSize, primitive::Integer};
use serde::Deserialize;
#[derive(Clone, Debug, Deserialize)]
pub struct Animation {
pub file_id: String,
pub file_unique_id: String,
pub width: Integer,
pub height: Integer,
pub duration: Integer,
pub thumb: Option<PhotoSize>,
pub file_name: Option<String>,
pub mime_type: Option<String>,
pub file_size: Option<Integer>,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn deserialize_full() {
let data: Animation = serde_json::from_value(serde_json::json!({
"file_id": "AwADBAADbXXXXXXXXXXXGBdhD2l6_XX",
"file_unique_id": "unique-id",
"width": 200,
"height": 200,
"duration": 243,
"thumb": {
"file_id": "AdddddUuUUUUccccUUmm_PPP",
"file_unique_id": "unique-thumb-id",
"width": 24,
"height": 24,
"file_size": 12324
},
"file_name": "testfilename",
"mime_type": "image/gif",
"file_size": 3897
}))
.unwrap();
assert_eq!(data.file_id, "AwADBAADbXXXXXXXXXXXGBdhD2l6_XX");
assert_eq!(data.file_unique_id, "unique-id");
assert_eq!(data.width, 200);
assert_eq!(data.height, 200);
assert_eq!(data.duration, 243);
let thumb = data.thumb.unwrap();
assert_eq!(thumb.file_id, "AdddddUuUUUUccccUUmm_PPP");
assert_eq!(thumb.file_unique_id, "unique-thumb-id");
assert_eq!(thumb.width, 24);
assert_eq!(thumb.height, 24);
assert_eq!(thumb.file_size.unwrap(), 12324);
assert_eq!(data.file_name.unwrap(), "testfilename");
assert_eq!(data.mime_type.unwrap(), "image/gif");
assert_eq!(data.file_size.unwrap(), 3897);
}
#[test]
fn deserialize_partial() {
let data: Animation = serde_json::from_value(serde_json::json!({
"file_id": "AwADBAADbXXXXXXXXXXXGBdhD2l6_XX",
"file_unique_id": "unique-id",
"width": 200,
"height": 200,
"duration": 243
}))
.unwrap();
assert_eq!(data.file_id, "AwADBAADbXXXXXXXXXXXGBdhD2l6_XX");
assert_eq!(data.file_unique_id, "unique-id");
assert_eq!(data.width, 200);
assert_eq!(data.height, 200);
assert_eq!(data.duration, 243);
assert!(data.thumb.is_none());
assert!(data.file_name.is_none());
assert!(data.mime_type.is_none());
assert!(data.file_size.is_none());
}
}