relay_redis/
scripts.rs

1use deadpool_redis::redis::Script;
2use std::sync::OnceLock;
3
4/// A collection of static methods to load predefined Redis scripts.
5pub struct RedisScripts;
6
7impl RedisScripts {
8    /// Returns all [`Script`]s.
9    pub fn all() -> [&'static Script; 3] {
10        [
11            Self::load_cardinality(),
12            Self::load_global_quota(),
13            Self::load_is_rate_limited(),
14        ]
15    }
16
17    /// Loads the cardinality Redis script.
18    pub fn load_cardinality() -> &'static Script {
19        static SCRIPT: OnceLock<Script> = OnceLock::new();
20        SCRIPT.get_or_init(|| Script::new(include_str!("scripts/cardinality.lua")))
21    }
22
23    /// Loads the global quota Redis script.
24    pub fn load_global_quota() -> &'static Script {
25        static SCRIPT: OnceLock<Script> = OnceLock::new();
26        SCRIPT.get_or_init(|| Script::new(include_str!("scripts/global_quota.lua")))
27    }
28
29    /// Loads the rate limiting check Redis script.
30    pub fn load_is_rate_limited() -> &'static Script {
31        static SCRIPT: OnceLock<Script> = OnceLock::new();
32        SCRIPT.get_or_init(|| Script::new(include_str!("scripts/is_rate_limited.lua")))
33    }
34}