Skip to main content

ConfigProvider

Trait ConfigProvider 

Source
pub trait ConfigProvider:
    RateLimitingProvider
    + ProxyProvider
    + FilteringProvider
    + ConnectionProvider
    + AuthenticationProvider { }
Expand description

Trait for complete configuration injection.

This trait combines all specialized configuration traits into one. Implement this trait to provide configuration from any source: environment variables, files, remote services, etc.

For more granular control, implement the individual traits:

§Example

use wisegate_core::{
    RateLimitingProvider, ProxyProvider, FilteringProvider, ConnectionProvider,
    AuthenticationProvider, Credentials,
    RateLimitConfig, RateLimitCleanupConfig, ProxyConfig,
};
use std::time::Duration;

struct MyConfig {
    credentials: Credentials,
}

impl RateLimitingProvider for MyConfig {
    fn rate_limit_config(&self) -> &RateLimitConfig {
        static CONFIG: RateLimitConfig = RateLimitConfig {
            max_requests: 100,
            window_duration: Duration::from_secs(60),
        };
        &CONFIG
    }

    fn rate_limit_cleanup_config(&self) -> &RateLimitCleanupConfig {
        static CONFIG: RateLimitCleanupConfig = RateLimitCleanupConfig {
            threshold: 10_000,
            interval: Duration::from_secs(60),
        };
        &CONFIG
    }
}

impl ProxyProvider for MyConfig {
    fn proxy_config(&self) -> &ProxyConfig {
        static CONFIG: ProxyConfig = ProxyConfig {
            timeout: Duration::from_secs(30),
            max_body_size: 100 * 1024 * 1024,
        };
        &CONFIG
    }

    fn allowed_proxy_ips(&self) -> Option<&[String]> { None }
}

impl FilteringProvider for MyConfig {
    fn blocked_ips(&self) -> &[String] { &[] }
    fn blocked_methods(&self) -> &[String] { &[] }
    fn blocked_patterns(&self) -> &[String] { &[] }
}

impl ConnectionProvider for MyConfig {
    fn max_connections(&self) -> usize { 10_000 }
}

impl AuthenticationProvider for MyConfig {
    fn auth_credentials(&self) -> &Credentials { &self.credentials }
    fn auth_realm(&self) -> &str { "WiseGate" }
}

Implementors§