Skip to main content

infinispan_fork/request/caches/
mod.rs

1pub 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}