zulip_api/message/get_file_temporary_url/
response.rs1use serde::{Deserialize, Serialize};
2
3use crate::response::BaseResponse;
4use crate::{field_access, impl_default, impl_display, impl_response};
5
6#[derive(Clone, Debug, Eq, PartialEq, Deserialize, Serialize)]
10pub struct Response {
11 #[serde(flatten)]
12 base: BaseResponse,
13 url: Option<String>,
14}
15
16impl Response {
17 pub const fn new() -> Self {
19 Self {
20 base: BaseResponse::new(),
21 url: None,
22 }
23 }
24}
25
26field_access! {
27 Response {
28 url: option_cow_deref { str, String },
33 }
34}
35
36impl_default!(Response);
37impl_display!(Response);
38impl_response!(Response, base);
39
40#[cfg(test)]
41mod test {
42 use super::*;
43
44 #[test]
45 fn test_response() {
46 let url = "/user_uploads/temporary/322F32632F39765378464E4C63306D3961396F4970705A4D74424565432F7A756C69702E7478743A316A5053616A3A3938625F44393446466D37357254315F4F414C425A4553464F6A55";
47
48 let response = Response::new().with_url(url);
49 let response_json = response.to_string();
50
51 assert_eq!(serde_json::to_string(&response).unwrap(), response_json);
52 assert_eq!(
53 serde_json::from_str::<Response>(&response_json).unwrap(),
54 response
55 );
56
57 assert_eq!(response.url(), Some(url));
58 }
59}