infinispan_fork/request/caches/
mod.rs1pub mod modes;
2
3use crate::request::caches::modes::*;
4use crate::request::{Method, Request};
5use serde::{Deserialize, Serialize};
6use serde_json::json;
7use std::collections::HashMap;
8
9pub(crate) const CACHES_ENDPOINT: &str = "/rest/v2/caches";
10
11#[derive(Eq, PartialEq, Debug, Serialize, Deserialize)]
12pub enum Cache {
13 #[serde(rename = "local-cache")]
14 Local(Local),
15
16 #[serde(rename = "replicated-cache")]
17 Replicated(Replicated),
18
19 #[serde(rename = "distributed-cache")]
20 Distributed(Distributed),
21
22 #[serde(rename = "invalidation-cache")]
23 Invalidation(Invalidation),
24}
25
26#[derive(Debug)]
27enum Action {
28 Clear,
29 Config,
30 Keys,
31 Size,
32 Stats,
33}
34
35impl Action {
36 pub fn to_query_args(&self) -> String {
37 let mut query_args = format!("action={:?}", self);
38 query_args.make_ascii_lowercase();
39 query_args
40 }
41}
42
43pub fn create_local(name: impl AsRef<str>) -> Request {
44 create_cache(name, Cache::Local(Local::default()))
45}
46
47pub fn create_replicated_async(name: impl AsRef<str>) -> Request {
48 create_cache(name, Cache::Replicated(Replicated::create_async()))
49}
50
51pub fn create_replicated_sync(name: impl AsRef<str>) -> Request {
52 create_cache(name, Cache::Replicated(Replicated::create_sync()))
53}
54
55pub fn create_distributed_async(name: impl AsRef<str>) -> Request {
56 create_cache(name, Cache::Distributed(Distributed::create_async()))
57}
58
59pub fn create_distributed_sync(name: impl AsRef<str>) -> Request {
60 create_cache(name, Cache::Distributed(Distributed::create_sync()))
61}
62
63pub fn create_invalidation_async(name: impl AsRef<str>) -> Request {
64 create_cache(name, Cache::Invalidation(Invalidation::create_async()))
65}
66
67pub fn create_invalidation_sync(name: impl AsRef<str>) -> Request {
68 create_cache(name, Cache::Invalidation(Invalidation::create_sync()))
69}
70
71pub fn exists(name: impl AsRef<str>) -> Request {
72 Request::new(Method::Head, cache_url(name), HashMap::new(), None)
73}
74
75pub fn get(name: impl AsRef<str>) -> Request {
76 Request::new(Method::Get, cache_url(name), HashMap::new(), None)
77}
78
79pub fn get_config(name: impl AsRef<str>) -> Request {
80 Request::new(
81 Method::Get,
82 cache_url_with_action(name, &Action::Config),
83 HashMap::new(),
84 None,
85 )
86}
87
88pub fn delete(name: impl AsRef<str>) -> Request {
89 Request::new(Method::Delete, cache_url(name), HashMap::new(), None)
90}
91
92pub fn keys(name: impl AsRef<str>) -> Request {
93 Request::new(
94 Method::Get,
95 cache_url_with_action(name, &Action::Keys),
96 HashMap::new(),
97 None,
98 )
99}
100
101pub fn clear(name: impl AsRef<str>) -> Request {
102 Request::new(
103 Method::Post,
104 cache_url_with_action(name, &Action::Clear),
105 HashMap::new(),
106 None,
107 )
108}
109
110pub fn size(name: impl AsRef<str>) -> Request {
111 Request::new(
112 Method::Get,
113 cache_url_with_action(name, &Action::Size),
114 HashMap::new(),
115 None,
116 )
117}
118
119pub fn stats(name: impl AsRef<str>) -> Request {
120 Request::new(
121 Method::Get,
122 cache_url_with_action(name, &Action::Stats),
123 HashMap::new(),
124 None,
125 )
126}
127
128pub fn list() -> Request {
129 Request::new(Method::Get, CACHES_ENDPOINT, HashMap::new(), None)
130}
131
132fn cache_url(name: impl AsRef<str>) -> String {
133 format!(
134 "{caches_endpoint}/{cache_name}",
135 caches_endpoint = CACHES_ENDPOINT,
136 cache_name = urlencoding::encode(name.as_ref())
137 )
138}
139
140fn cache_url_with_action(name: impl AsRef<str>, action: &Action) -> String {
141 format!("{}?{}", cache_url(name), action.to_query_args())
142}
143
144fn create_cache(name: impl AsRef<str>, cache: Cache) -> Request {
145 Request::new(
146 Method::Post,
147 cache_url(name),
148 HashMap::new(),
149 Some(json!(cache).to_string()),
150 )
151}