pub mod filter_list_type;
pub mod filters_compilation_policy;
pub mod locale;
pub mod request_proxy_mode;
pub use self::filter_list_type::FilterListType;
pub use self::filters_compilation_policy::FiltersCompilationPolicy;
pub use self::locale::Locale;
pub use self::request_proxy_mode::RequestProxyMode;
use crate::string;
use std::cmp::max;
const MINIMAL_EXPIRES_VALUE: i32 = 3600;
const DEFAULT_REQUEST_TIMEOUT_MS: i32 = 60000;
const DEFAULT_EXPIRES_VALUE_FOR_FILTERS: i32 = 86400;
pub(crate) const DEFAULT_FILTER_UPDATE_CONCURRENCY: usize = 16;
pub(crate) const DEFAULT_FILTER_UPDATE_DISPATCH_DELAY_MS: i32 = 60;
pub struct Configuration {
pub filter_list_type: FilterListType,
pub working_directory: Option<String>,
pub locale: Locale,
pub default_filter_list_expires_period_sec: i32,
pub filters_compilation_policy: FiltersCompilationPolicy,
pub metadata_url: String,
pub metadata_locales_url: String,
pub request_timeout_ms: i32,
pub request_proxy_mode: RequestProxyMode,
pub should_ignore_expires_for_local_urls: bool,
pub auto_lift_up_database: bool,
pub app_name: String,
pub version: String,
pub integrity_key: Option<String>,
pub filter_update_concurrency: usize,
pub filter_update_dispatch_delay_ms: i32,
}
pub(crate) const LOCALES_DELIMITER: &str = "_";
impl Configuration {
pub(crate) fn normalized(&mut self) {
self.locale = Configuration::normalize_locale_string(&self.locale);
}
pub(crate) fn normalize_locale_string(locale: &Locale) -> Locale {
locale.replace('-', LOCALES_DELIMITER)
}
pub(crate) fn resolve_right_expires_value(&self, filter_expires: i32) -> i32 {
if filter_expires < MINIMAL_EXPIRES_VALUE {
max(
self.default_filter_list_expires_period_sec,
MINIMAL_EXPIRES_VALUE,
)
} else {
filter_expires
}
}
}
impl Default for Configuration {
fn default() -> Self {
Self {
filter_list_type: FilterListType::STANDARD,
working_directory: None,
locale: string!("en"),
default_filter_list_expires_period_sec: DEFAULT_EXPIRES_VALUE_FOR_FILTERS,
filters_compilation_policy: Default::default(),
metadata_url: String::new(),
request_proxy_mode: RequestProxyMode::UseSystemProxy,
metadata_locales_url: String::new(),
should_ignore_expires_for_local_urls: false,
request_timeout_ms: DEFAULT_REQUEST_TIMEOUT_MS,
auto_lift_up_database: true,
app_name: String::new(),
version: String::new(),
integrity_key: None,
filter_update_concurrency: DEFAULT_FILTER_UPDATE_CONCURRENCY,
filter_update_dispatch_delay_ms: DEFAULT_FILTER_UPDATE_DISPATCH_DELAY_MS,
}
}
}