lair_keystore_api/lair_api/
hello.rs

1use super::*;
2
3/// Initiate communication with the target lair instance.
4#[derive(Debug, serde::Serialize, serde::Deserialize)]
5#[serde(rename_all = "camelCase")]
6pub struct LairApiReqHello {
7    /// Msg id to relate request / response.
8    pub msg_id: Arc<str>,
9}
10
11impl LairApiReqHello {
12    /// Make a new server info request.
13    pub fn new() -> Self {
14        Self {
15            msg_id: new_msg_id(),
16        }
17    }
18}
19
20impl std::convert::TryFrom<LairApiEnum> for LairApiReqHello {
21    type Error = one_err::OneErr;
22
23    fn try_from(e: LairApiEnum) -> Result<Self, Self::Error> {
24        if let LairApiEnum::ReqHello(s) = e {
25            Ok(s)
26        } else {
27            Err(format!("Invalid response type: {e:?}").into())
28        }
29    }
30}
31
32impl AsLairCodec for LairApiReqHello {
33    fn into_api_enum(self) -> LairApiEnum {
34        LairApiEnum::ReqHello(self)
35    }
36}
37
38/// The hello response from the target lair instance.
39/// This data allows us to verify we are speaking to our expected target.
40#[derive(Debug, serde::Serialize, serde::Deserialize)]
41#[serde(rename_all = "camelCase")]
42pub struct LairApiResHello {
43    /// Msg id to relate request / response.
44    pub msg_id: Arc<str>,
45
46    /// The server name / identifier.
47    pub name: Arc<str>,
48
49    /// The server semantic version.
50    pub version: Arc<str>,
51
52    /// The public key identifying this server.
53    pub server_pub_key: BinDataSized<32>,
54}
55
56impl std::convert::TryFrom<LairApiEnum> for LairApiResHello {
57    type Error = one_err::OneErr;
58
59    fn try_from(e: LairApiEnum) -> Result<Self, Self::Error> {
60        if let LairApiEnum::ResHello(s) = e {
61            Ok(s)
62        } else {
63            Err(format!("Invalid response type: {e:?}").into())
64        }
65    }
66}
67
68impl AsLairCodec for LairApiResHello {
69    fn into_api_enum(self) -> LairApiEnum {
70        LairApiEnum::ResHello(self)
71    }
72}
73
74impl AsLairRequest for LairApiReqHello {
75    type Response = LairApiResHello;
76}
77
78impl AsLairResponse for LairApiResHello {
79    type Request = LairApiReqHello;
80}