1use reqwest::{Client, Error, Response};
3use serde::Serialize;
4use url::Url;
5
6pub struct LucidKVClient {
7 pub http_client: Client,
8 pub base_url: Url,
9 jwt: Option<String>,
10}
11
12impl LucidKVClient {
13 pub fn new(option_base_url: Option<String>) -> Self {
15 let http_client = Client::new();
16 let mut base_url: Url =
17 Url::parse(&option_base_url.unwrap_or(String::from("http://127.0.0.1:7020")))
18 .expect("Invalid input url");
19
20 base_url = base_url.join("/api/kv/").unwrap();
21
22 Self {
23 http_client,
24 base_url,
25 jwt: None,
26 }
27 }
28
29 pub async fn store_data<T>(&self, key: String, data: T) -> Result<Response, Error>
32 where
33 T: Serialize,
34 {
35 let url: Url = self.base_url.join(&key).unwrap();
36
37 self.http_client.put(url).json(&data).send().await
38 }
39
40 pub async fn get_data(&self, key: String) -> Result<Response, Error> {
43 let url: Url = self.base_url.join(&key).unwrap();
44 self.http_client.get(url).send().await
45 }
46
47 pub async fn delete_data(&self, key: String) -> Result<Response, Error> {
50 let url: Url = self.base_url.join(&key).unwrap();
51 self.http_client.delete(url).send().await
52 }
53
54 pub async fn is_key_present(&self, key: String) -> bool {
57 let url: Url = self.base_url.join(&key).unwrap();
58 match self.http_client.head(url).send().await {
59 Ok(res) => res.status() == reqwest::StatusCode::OK,
60 _ => false,
61 }
62 }
63}