lucid_client/
lib.rs

1/// LucidKV Client
2use 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    /// Create a new basic Lucid KV Client
14    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    /// Stores data into Lucid DB
30    /// Will panic if key is not URI safe
31    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    /// Gets data from Lucid DB
41    /// Will panic if key is not URI safe
42    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    /// Delete data from Lucid DB
48    /// Will panic if key is not URI safe
49    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    /// Sends HEAD request to Lucid DB, will return true if key is present
55    /// Will panic if key is not URI safe
56    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}