use std::{num::NonZeroU32, time::Duration};
use soaprs_core::{SoapError, SoapResult};
#[derive(Debug, Clone, PartialEq, Eq, Default)]
pub enum AuthorizationPolicy {
#[default]
Public,
Authenticated,
AnyRole(Vec<String>),
AllRoles(Vec<String>),
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct RateLimitPolicy {
pub requests: NonZeroU32,
pub period: Duration,
}
impl RateLimitPolicy {
pub fn new(requests: NonZeroU32, period: Duration) -> SoapResult<Self> {
if period.is_zero() {
return Err(SoapError::validation(
"rate-limit period must be greater than zero",
));
}
Ok(Self { requests, period })
}
}