use serde::{Deserialize, Serialize};
use super::config_regex::ConfigRegex;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", default)]
pub struct PartialBundlingConfig {
pub target_concurrent_requests: usize,
pub target_min_size: usize,
pub target_max_size: usize,
pub groups: Vec<PartialBundlingGroupConfig>,
pub enforce_resources: Vec<PartialBundlingEnforceResourceConfig>,
pub enforce_target_concurrent_requests: bool,
pub enforce_target_min_size: bool,
pub immutable_modules: Vec<ConfigRegex>,
pub immutable_modules_weight: f32,
}
impl Default for PartialBundlingConfig {
fn default() -> Self {
Self {
target_concurrent_requests: 25,
target_min_size: 1024 * 100,
target_max_size: 1024 * 1500,
groups: vec![],
enforce_resources: vec![],
enforce_target_concurrent_requests: false,
enforce_target_min_size: false,
immutable_modules: vec![ConfigRegex::default()],
immutable_modules_weight: 0.8,
}
}
}
#[derive(Debug, Serialize, Deserialize, Clone, Default)]
#[serde(rename_all = "camelCase", default)]
pub struct PartialBundlingGroupConfig {
pub name: String,
pub test: Vec<ConfigRegex>,
pub group_type: PartialBundlingGroupConfigGroupType,
pub resource_type: PartialBundlingGroupConfigResourceType,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub enum PartialBundlingGroupConfigGroupType {
#[serde(rename = "all")]
All,
#[serde(rename = "mutable")]
Mutable,
#[serde(rename = "immutable")]
Immutable,
}
impl PartialBundlingGroupConfigGroupType {
pub fn is_match(&self, immutable: bool) -> bool {
match self {
Self::All => true,
Self::Mutable => !immutable,
Self::Immutable => immutable,
}
}
}
impl Default for PartialBundlingGroupConfigGroupType {
fn default() -> Self {
Self::All
}
}
#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub enum PartialBundlingGroupConfigResourceType {
#[serde(rename = "all")]
All,
#[serde(rename = "initial")]
Initial,
#[serde(rename = "async")]
Async,
}
impl Default for PartialBundlingGroupConfigResourceType {
fn default() -> Self {
Self::All
}
}
#[derive(Debug, Serialize, Deserialize, Clone, Default)]
#[serde(rename_all = "camelCase", default)]
pub struct PartialBundlingEnforceResourceConfig {
pub name: String,
pub test: Vec<ConfigRegex>,
}