paas_api/
status.rs

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
use crate::{CURRENT_PROTOCOL_VERSION, MIN_SUPPORTED_VERSION};
use chrono::{DateTime, Utc};
use semver::Version;
use serde::{Deserialize, Serialize};

fn default_protocol_version() -> Version {
    Version::parse(CURRENT_PROTOCOL_VERSION).expect("Invalid CURRENT_PROTOCOL_VERSION")
}
fn default_min_version() -> Version {
    Version::parse(MIN_SUPPORTED_VERSION).expect("Invalid MIN_SUPPORTED_VERSION")
}
#[derive(Serialize, Deserialize, Debug)]
pub struct VersionInfo {
    #[serde(default = "default_protocol_version")]
    pub protocol_version: Version,
    #[serde(default = "default_min_version")]
    pub min_supported_version: Version,
}
impl Default for VersionInfo {
    fn default() -> Self {
        Self {
            protocol_version: default_protocol_version(),
            min_supported_version: default_min_version(),
        }
    }
}
impl VersionInfo {
    pub fn new() -> Self {
        Self::default()
    }
    pub fn is_compatible_with(&self, other: &VersionInfo) -> bool {
        self.protocol_version >= other.min_supported_version
            && other.protocol_version >= self.min_supported_version
    }
}

pub type SystemId = String;

#[derive(Serialize, Deserialize, Debug)]
pub struct StatusResponse {
    pub system_id: SystemId,
    pub timestamp: DateTime<Utc>,
    pub version_info: VersionInfo,
}