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