cratefield_runtime_cloudflare/ports/
rate_limit.rs1use async_trait::async_trait;
5use cratefield_core::{Decision, RateLimitError, RateLimiter};
6use worker::RateLimiter as WorkerRateLimiter;
7
8pub struct RateLimitPort(pub WorkerRateLimiter);
9
10#[async_trait]
11impl RateLimiter for RateLimitPort {
12 async fn limit(&self, key: &str) -> Result<Decision, RateLimitError> {
13 let outcome = self
14 .0
15 .limit(key.to_owned())
16 .await
17 .map_err(|err| RateLimitError::Transport(err.to_string()))?;
18 Ok(Decision {
19 ok: outcome.success,
20 retry_after: None,
21 quota: None,
24 })
25 }
26}