1use std::{num::NonZeroU32, time::Duration};
4
5use soaprs_core::{SoapError, SoapResult};
6
7#[derive(Debug, Clone, PartialEq, Eq, Default)]
9pub enum AuthorizationPolicy {
10 #[default]
12 Public,
13 Authenticated,
15 AnyRole(Vec<String>),
17 AllRoles(Vec<String>),
19}
20
21#[derive(Debug, Clone, Copy, PartialEq, Eq)]
23pub struct RateLimitPolicy {
24 pub requests: NonZeroU32,
26 pub period: Duration,
28}
29
30impl RateLimitPolicy {
31 pub fn new(requests: NonZeroU32, period: Duration) -> SoapResult<Self> {
33 if period.is_zero() {
34 return Err(SoapError::validation(
35 "rate-limit period must be greater than zero",
36 ));
37 }
38 Ok(Self { requests, period })
39 }
40}