use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct MeilisearchConfig {
pub url: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub api_key: Option<String>,
#[serde(default = "default_timeout")]
pub timeout: u64,
#[serde(default = "default_connections")]
pub max_connections: usize,
#[serde(default)]
pub index_settings: IndexSettings,
#[serde(skip_serializing_if = "Option::is_none")]
pub primary_key: Option<String>,
#[serde(default = "default_batch_size")]
pub batch_size: usize,
#[serde(default = "default_auto_create_index")]
pub auto_create_index: bool,
#[serde(default)]
pub circuit_breaker: CircuitBreakerConfig,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct CircuitBreakerConfig {
#[serde(default = "default_circuit_breaker_enabled")]
pub enabled: bool,
#[serde(default = "default_error_rate")]
pub error_rate: f64,
#[serde(default = "default_min_request_count")]
pub min_request_count: u64,
#[serde(default = "default_consecutive_failures")]
pub consecutive_failures: u64,
#[serde(default = "default_circuit_timeout")]
pub timeout_secs: u64,
}
impl Default for CircuitBreakerConfig {
fn default() -> Self {
Self {
enabled: default_circuit_breaker_enabled(),
error_rate: default_error_rate(),
min_request_count: default_min_request_count(),
consecutive_failures: default_consecutive_failures(),
timeout_secs: default_circuit_timeout(),
}
}
}
#[derive(Debug, Clone, Deserialize, Serialize, Default)]
pub struct IndexSettings {
pub searchable_attributes: Option<Vec<String>>,
pub displayed_attributes: Option<Vec<String>>,
pub filterable_attributes: Option<Vec<String>>,
pub sortable_attributes: Option<Vec<String>>,
pub ranking_rules: Option<Vec<String>>,
pub stop_words: Option<Vec<String>>,
pub synonyms: Option<HashMap<String, Vec<String>>>,
}
fn default_timeout() -> u64 {
30
}
fn default_connections() -> usize {
10
}
fn default_batch_size() -> usize {
1000
}
fn default_auto_create_index() -> bool {
true
}
fn default_circuit_breaker_enabled() -> bool {
true
}
fn default_error_rate() -> f64 {
0.5
}
fn default_min_request_count() -> u64 {
10
}
fn default_consecutive_failures() -> u64 {
5
}
fn default_circuit_timeout() -> u64 {
60
}