synapse_admin_api/version/get_server_version/
v1.rs

1//! [GET /_synapse/admin/v1/server_version](https://github.com/element-hq/synapse/blob/master/docs/admin_api/version_api.md)
2
3use ruma::api::{metadata, request, response, Metadata};
4use serde::{Deserialize, Serialize};
5
6const METADATA: Metadata = metadata! {
7    method: GET,
8    rate_limited: false,
9    authentication: None, // AccessToken?
10    history: {
11        unstable => "/_synapse/admin/v1/server_version",
12    }
13};
14
15#[request]
16#[derive(Default)]
17pub struct Request {}
18
19#[response]
20#[derive(Serialize, Deserialize)]
21pub struct Response {
22    /// The Synapse version.
23    pub server_version: String,
24
25    /// The Python version.
26    ///
27    /// Only sent by Synapse versions before 1.94.0.
28    #[serde(skip_serializing_if = "Option::is_none")]
29    pub python_version: Option<String>,
30}
31
32impl Request {
33    /// Creates an empty `Request`.
34    pub fn new() -> Self {
35        Self {}
36    }
37}
38
39impl Response {
40    /// Creates a `Response` with the given Synapse versions.
41    pub fn new(server_version: String) -> Self {
42        Self { server_version, python_version: None }
43    }
44}
45
46#[test]
47fn test_response_with_python_version() {
48    use serde_json;
49
50    let server_version = "1.2.3";
51
52    // Check create response case
53    let response = Response::new(server_version.to_owned());
54    assert_eq!(response.server_version, server_version);
55    assert_eq!(response.python_version, None);
56
57    // Check serialization case
58    let serialized = serde_json::to_string(&response).unwrap();
59    assert_eq!(serialized, "{\"server_version\":\"1.2.3\"}");
60
61    // Check deserialization case
62    let deserialized: Response = serde_json::from_str(&serialized).unwrap();
63    assert_eq!(deserialized.server_version, "1.2.3");
64    assert_eq!(deserialized.python_version, None);
65
66    // Check backwards compatibility
67    let old_serialized = "{\"server_version\":\"1.2.3\",\"python_version\":\"4.5.6\"}";
68    let old_deserialized: Response = serde_json::from_str(old_serialized).unwrap();
69    assert_eq!(old_deserialized.server_version, "1.2.3");
70    assert_eq!(old_deserialized.python_version.as_deref(), Some("4.5.6"));
71}