infinispan_fork/request/
entries.rs1use 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}