ruma_client_api/authenticated_media/
get_media_preview.rs1pub mod v1 {
6 use ruma_common::{
11 MilliSecondsSinceUnixEpoch,
12 api::{auth_scheme::AccessToken, request, response},
13 metadata,
14 };
15 use serde::Serialize;
16 use serde_json::value::{RawValue as RawJsonValue, to_raw_value as to_raw_json_value};
17
18 metadata! {
19 method: GET,
20 rate_limited: true,
21 authentication: AccessToken,
22 history: {
23 unstable("org.matrix.msc3916") => "/_matrix/client/unstable/org.matrix.msc3916/media/preview_url",
24 1.11 | stable("org.matrix.msc3916.stable") => "/_matrix/client/v1/media/preview_url",
25 }
26 }
27
28 #[request(error = crate::Error)]
30 pub struct Request {
31 #[ruma_api(query)]
33 pub url: String,
34
35 #[ruma_api(query)]
37 #[serde(skip_serializing_if = "Option::is_none")]
38 pub ts: Option<MilliSecondsSinceUnixEpoch>,
39 }
40
41 #[response(error = crate::Error)]
43 #[derive(Default)]
44 pub struct Response {
45 #[ruma_api(body)]
50 pub data: Option<Box<RawJsonValue>>,
51 }
52
53 impl Request {
54 pub fn new(url: String) -> Self {
56 Self { url, ts: None }
57 }
58 }
59
60 impl Response {
61 pub fn new() -> Self {
63 Self { data: None }
64 }
65
66 pub fn from_raw_value(data: Box<RawJsonValue>) -> Self {
69 Self { data: Some(data) }
70 }
71
72 pub fn from_serialize<T: Serialize>(data: &T) -> serde_json::Result<Self> {
75 Ok(Self { data: Some(to_raw_json_value(data)?) })
76 }
77 }
78
79 #[cfg(test)]
80 mod tests {
81 use assert_matches2::assert_matches;
82 use serde_json::{
83 from_value as from_json_value, json,
84 value::{RawValue as RawJsonValue, to_raw_value as to_raw_json_value},
85 };
86
87 #[test]
90 fn raw_json_deserialize() {
91 type OptRawJson = Option<Box<RawJsonValue>>;
92
93 assert_matches!(from_json_value::<OptRawJson>(json!(null)).unwrap(), None);
94 from_json_value::<OptRawJson>(json!("test")).unwrap().unwrap();
95 from_json_value::<OptRawJson>(json!({ "a": "b" })).unwrap().unwrap();
96 }
97
98 #[test]
100 fn raw_json_serialize() {
101 to_raw_json_value(&json!(null)).unwrap();
102 to_raw_json_value(&json!("string")).unwrap();
103 to_raw_json_value(&json!({})).unwrap();
104 to_raw_json_value(&json!({ "a": "b" })).unwrap();
105 }
106 }
107}