Skip to main content

infinispan_fork/request/
entries.rs

1use crate::request::caches::CACHES_ENDPOINT;
2use crate::request::{Method, Request, ToHttpRequest};
3use std::collections::HashMap;
4use std::time::Duration;
5
6const TTL_HEADER: &str = "timeToLiveSeconds";
7
8#[derive(Debug)]
9pub struct CreateEntryReq {
10    cache_name: String,
11    entry_name: String,
12    value: Option<String>,
13    ttl: Option<Duration>,
14}
15
16impl CreateEntryReq {
17    pub fn new(cache_name: impl Into<String>, entry_name: impl Into<String>) -> Self {
18        Self {
19            cache_name: cache_name.into(),
20            entry_name: entry_name.into(),
21            value: None,
22            ttl: None,
23        }
24    }
25
26    pub fn with_value(mut self, value: String) -> Self {
27        self.value = Some(value);
28        self
29    }
30
31    pub fn with_ttl(mut self, ttl: Duration) -> Self {
32        self.ttl = Some(ttl);
33        self
34    }
35}
36
37impl From<&CreateEntryReq> for Request {
38    fn from(request: &CreateEntryReq) -> Self {
39        let mut headers = HashMap::new();
40
41        if let Some(ttl) = request.ttl {
42            headers.insert(TTL_HEADER.into(), ttl.as_secs().to_string());
43        }
44
45        Self::new(
46            Method::Post,
47            entry_url(&request.cache_name, &request.entry_name),
48            headers,
49            request.value.clone(),
50        )
51    }
52}
53
54impl ToHttpRequest for CreateEntryReq {
55    fn to_http_req(
56        &self,
57        base_url: impl AsRef<str>,
58    ) -> http::Request<String> {
59        Request::from(self).to_http_req(base_url)
60    }
61}
62
63pub fn create(cache_name: impl Into<String>, entry_name: impl Into<String>) -> CreateEntryReq {
64    CreateEntryReq::new(cache_name, entry_name)
65}
66
67pub fn get(cache_name: impl AsRef<str>, entry_name: impl AsRef<str>) -> Request {
68    Request::new(
69        Method::Get,
70        entry_url(cache_name, entry_name),
71        HashMap::new(),
72        None,
73    )
74}
75
76pub fn exists(cache_name: impl AsRef<str>, entry_name: impl AsRef<str>) -> Request {
77    Request::new(
78        Method::Head,
79        entry_url(cache_name, entry_name),
80        HashMap::new(),
81        None,
82    )
83}
84
85pub fn update(
86    cache_name: impl AsRef<str>,
87    entry_name: impl AsRef<str>,
88    value: impl Into<String>,
89) -> Request {
90    Request::new(
91        Method::Put,
92        entry_url(cache_name, entry_name),
93        HashMap::new(),
94        Some(value.into()),
95    )
96}
97
98pub fn delete(cache_name: impl AsRef<str>, entry_name: impl AsRef<str>) -> Request {
99    Request::new(
100        Method::Delete,
101        entry_url(cache_name, entry_name),
102        HashMap::new(),
103        None,
104    )
105}
106
107fn entry_url(cache_name: impl AsRef<str>, entry_name: impl AsRef<str>) -> String {
108    format!(
109        "{caches_endpoint}/{cache_name}/{entry_name}",
110        caches_endpoint = CACHES_ENDPOINT,
111        cache_name = urlencoding::encode(cache_name.as_ref()),
112        entry_name = urlencoding::encode(entry_name.as_ref())
113    )
114}