1use crate::common::{Request, Response, UrlPrefix};
2use crate::{SdkError, SdkResult};
3use lit_node_core::{
4 NodeSet,
5 request::JsonSDKHandshakeRequest,
6 response::{GenericResponse, JsonSDKHandshakeResponse},
7};
8use std::{collections::HashMap, marker::PhantomData};
9use uuid::Uuid;
10
11pub type HandshakeRequest = Request<
13 HandshakeRequestBuilder,
14 JsonSDKHandshakeRequest,
15 GenericResponse<JsonSDKHandshakeResponse>,
16>;
17
18pub type HandshakeResponse = Response<GenericResponse<JsonSDKHandshakeResponse>>;
20
21basic_builder!(
22 HandshakeRequestBuilder,
23 JsonSDKHandshakeRequest,
24 GenericResponse<JsonSDKHandshakeResponse>,
25 "web/handshake"
26);
27
28impl HandshakeRequestBuilder {
29 builder_setter!(
30 client_public_key,
31 client_public_key,
32 String,
33 JsonSDKHandshakeRequest,
34 client_public_key
35 );
36 builder_setter!(
37 challenge,
38 challenge,
39 Option<String>,
40 JsonSDKHandshakeRequest,
41 challenge
42 );
43
44 fn request_checks(&self) -> SdkResult<()> {
46 if let Some(request) = &self.request {
47 if request.client_public_key.is_empty() {
48 return Err(SdkError::Build(
49 "No client public key is specified".to_string(),
50 ));
51 }
52
53 if let Some(challenge) = &request.challenge
54 && challenge.is_empty()
55 {
56 return Err(SdkError::Build("No challenge is specified".to_string()));
57 }
58 }
59 Ok(())
60 }
61}
62
63#[cfg(test)]
64mod tests {
65 use super::*;
66
67 #[test]
68 fn set_request_fields() {
69 let request = HandshakeRequest::new()
70 .client_public_key("blah".to_string())
71 .challenge("challenge".to_string())
72 .node_set(vec![NodeSet {
73 socket_address: "".to_string(),
74 value: 0,
75 }])
76 .build()
77 .unwrap();
78 assert_eq!(request.inner.challenge, Some("challenge".to_string()));
79 assert_eq!(request.inner.client_public_key, "blah".to_string());
80 }
81
82 #[test]
83 fn set_request() {
84 let request = HandshakeRequest::new()
85 .request(JsonSDKHandshakeRequest {
86 challenge: None,
87 client_public_key: "blah".to_string(),
88 })
89 .node_set(vec![NodeSet {
90 socket_address: "".to_string(),
91 value: 0,
92 }])
93 .build()
94 .unwrap();
95 assert_eq!(request.inner.challenge, None);
96 assert_eq!(request.inner.client_public_key, "blah".to_string());
97 }
98}