use serde::{Deserialize, Serialize};
use crate::engine::ExternalEngineConfig;
const fn default_true() -> bool {
true
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct RewriteConfig {
pub skip: Option<SkipConfig>,
pub pipe: Option<PipeConfig>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub rewrite: Vec<RewriteRule>,
pub permissions: Option<PermissionsConfig>,
pub debug: Option<DebugConfig>,
pub transparent: Option<TransparentConfig>,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct TransparentConfig {
#[serde(default)]
pub commands: Vec<String>,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct DebugConfig {
#[serde(default)]
pub log_parse_failures: bool,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct PermissionsConfig {
#[serde(default)]
pub engine: PermissionEngineType,
pub external: Option<ExternalEngineConfig>,
}
#[derive(Debug, Clone, Deserialize, Serialize, Default, PartialEq, Eq)]
#[serde(rename_all = "lowercase")]
pub enum PermissionEngineType {
#[default]
Builtin,
External,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct PipeConfig {
#[serde(default = "default_true")]
pub strip: bool,
#[serde(default)]
pub prefer_less: bool,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct SkipConfig {
#[serde(default)]
pub patterns: Vec<String>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct RewriteRule {
#[serde(rename = "match")]
pub match_pattern: String,
pub replace: String,
}