use ahash::AHashSet as HashSet;
use chrono::Utc;
use serde::{Deserialize, Serialize};
mod actions;
mod config;
mod history;
mod limiter;
mod limiter_type;
mod quota_type;
mod rule;
pub use actions::{Action, ActionConfig, BanConfig, BanScope, CacheBackend, MetricsBackend};
pub use config::{GlobalConfig, StorageType, TrustedProxyConfig};
pub use history::{ChangeSource, ConfigChangeRecord, ConfigHistory};
pub(crate) use limiter::parse_window_size;
pub use limiter::{LimiterConfig, OverdraftConfig};
pub use limiter_type::LimiterTypeName;
pub use quota_type::QuotaType;
pub use rule::Matcher;
pub use rule::Rule;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FlowControlConfig {
pub version: String,
pub global: GlobalConfig,
pub rules: Vec<Rule>,
}
#[derive(Clone, Debug)]
pub struct ConfigBuilder {
storage: StorageType,
cache: CacheBackend,
metrics: MetricsBackend,
trusted_proxies: TrustedProxyConfig,
rules: Vec<RuleBuilder>,
}
#[derive(Clone, Debug)]
pub struct RuleBuilder {
id: String,
name: String,
priority: u16,
matchers: Vec<Matcher>,
limiters: Vec<LimiterConfig>,
action: ActionConfig,
}
mod types_impl;