Skip to main content

richat_shared/
version.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Copy, Deserialize, Serialize)]
4pub struct Version<'a> {
5    pub package: &'a str,
6    pub version: &'a str,
7    pub proto: &'a str,
8    pub proto_richat: &'a str,
9    pub solana: &'a str,
10    pub git: &'a str,
11    pub rustc: &'a str,
12    pub buildts: &'a str,
13}
14
15impl<'a> Version<'a> {
16    pub fn create_grpc_version_info(self) -> GrpcVersionInfo<'a> {
17        GrpcVersionInfo::new(self)
18    }
19}
20
21#[derive(Debug, Clone, Deserialize, Serialize)]
22pub struct GrpcVersionInfoExtra {
23    pub hostname: Option<String>,
24}
25
26#[derive(Debug, Clone, Deserialize, Serialize)]
27pub struct GrpcVersionInfo<'a> {
28    #[serde(borrow)]
29    pub version: Version<'a>,
30    pub extra: GrpcVersionInfoExtra,
31}
32
33impl<'a> GrpcVersionInfo<'a> {
34    pub fn new(version: Version<'a>) -> Self {
35        Self {
36            version,
37            extra: GrpcVersionInfoExtra {
38                hostname: hostname::get()
39                    .ok()
40                    .and_then(|name| name.into_string().ok()),
41            },
42        }
43    }
44
45    pub fn json(&self) -> String {
46        serde_json::to_string(self).expect("json serialization never fail")
47    }
48
49    pub fn value(&self) -> serde_json::Value {
50        serde_json::to_value(self).expect("json serialization never fail")
51    }
52}