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
use std::time::SystemTime;
use ruma_api::ruma_api;
use serde_json::value::RawValue as RawJsonValue;
ruma_api! {
metadata {
description: "Get a preview for a URL.",
name: "get_media_preview",
method: GET,
path: "/_matrix/media/r0/preview_url",
rate_limited: true,
requires_authentication: true,
}
request {
#[ruma_api(query)]
pub url: String,
#[ruma_api(query)]
#[serde(with = "ruma_serde::time::ms_since_unix_epoch")]
pub ts: SystemTime,
}
response {
#[ruma_api(body)]
pub data: Option<Box<RawJsonValue>>,
}
error: crate::Error
}
#[cfg(test)]
mod tests {
use serde_json::{
from_value as from_json_value, json,
value::{to_raw_value as to_raw_json_value, RawValue as RawJsonValue},
};
#[test]
fn raw_json_deserialize() {
type OptRawJson = Option<Box<RawJsonValue>>;
assert!(from_json_value::<OptRawJson>(json!(null))
.unwrap()
.is_none());
assert!(from_json_value::<OptRawJson>(json!("test"))
.unwrap()
.is_some());
assert!(from_json_value::<OptRawJson>(json!({ "a": "b" }))
.unwrap()
.is_some());
}
#[test]
fn raw_json_serialize() {
assert!(to_raw_json_value(&json!(null)).is_ok());
assert!(to_raw_json_value(&json!("string")).is_ok());
assert!(to_raw_json_value(&json!({})).is_ok());
assert!(to_raw_json_value(&json!({ "a": "b" })).is_ok());
}
}