use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct ScriptEngineConfig {
#[serde(default = "default_engine_type")]
pub engine: String, }
fn default_engine_type() -> String {
"rhai".to_string()
}
impl Default for ScriptEngineConfig {
fn default() -> Self {
Self {
engine: default_engine_type(),
}
}
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct FlowStateConfig {
#[serde(default = "default_backend_type")]
pub backend: String, #[serde(default = "default_ttl_seconds")]
pub ttl_seconds: i64,
#[serde(default)]
pub redis: Option<RedisConfig>,
}
fn default_backend_type() -> String {
"inmemory".to_string()
}
fn default_ttl_seconds() -> i64 {
300
}
impl Default for FlowStateConfig {
fn default() -> Self {
Self {
backend: default_backend_type(),
ttl_seconds: default_ttl_seconds(),
redis: None,
}
}
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct RedisConfig {
pub url: String,
#[serde(default = "default_redis_pool_size")]
pub pool_size: usize,
#[serde(default = "default_redis_key_prefix")]
pub key_prefix: String,
}
fn default_redis_pool_size() -> usize {
10
}
fn default_redis_key_prefix() -> String {
"rift:".to_string()
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct ScriptPoolConfigFile {
#[serde(default = "default_script_pool_workers")]
pub workers: usize,
#[serde(default = "default_script_pool_queue_size")]
pub queue_size: usize,
#[serde(default = "default_script_pool_timeout_ms")]
pub timeout_ms: u64,
}
fn default_script_pool_workers() -> usize {
0
}
fn default_script_pool_queue_size() -> usize {
1000
}
fn default_script_pool_timeout_ms() -> u64 {
5000
}
impl Default for ScriptPoolConfigFile {
fn default() -> Self {
Self {
workers: default_script_pool_workers(),
queue_size: default_script_pool_queue_size(),
timeout_ms: default_script_pool_timeout_ms(),
}
}
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct DecisionCacheConfigFile {
#[serde(default = "default_decision_cache_enabled")]
pub enabled: bool,
#[serde(default = "default_decision_cache_max_size")]
pub max_size: usize,
#[serde(default = "default_decision_cache_ttl_seconds")]
pub ttl_seconds: u64,
}
fn default_decision_cache_enabled() -> bool {
true
}
fn default_decision_cache_max_size() -> usize {
10000
}
fn default_decision_cache_ttl_seconds() -> u64 {
300
}
impl Default for DecisionCacheConfigFile {
fn default() -> Self {
Self {
enabled: default_decision_cache_enabled(),
max_size: default_decision_cache_max_size(),
ttl_seconds: default_decision_cache_ttl_seconds(),
}
}
}