Skip to main content

fraiseql_cli/config/toml_schema/
caching.rs

1//! Caching and analytics configuration for TOML schema.
2
3use serde::{Deserialize, Serialize};
4
5/// Caching configuration
6#[derive(Debug, Clone, Deserialize, Serialize)]
7#[serde(default, deny_unknown_fields)]
8pub struct CachingConfig {
9    /// Enable caching
10    #[serde(default)]
11    pub enabled:   bool,
12    /// Cache backend (redis, memory, postgresql)
13    pub backend:   String,
14    /// Redis connection URL
15    pub redis_url: Option<String>,
16    /// Cache invalidation rules
17    pub rules:     Vec<CacheRule>,
18}
19
20impl Default for CachingConfig {
21    fn default() -> Self {
22        Self {
23            enabled:   false,
24            backend:   "redis".to_string(),
25            redis_url: None,
26            rules:     vec![],
27        }
28    }
29}
30
31/// Cache invalidation rule
32#[derive(Debug, Clone, Deserialize, Serialize)]
33#[serde(deny_unknown_fields)]
34pub struct CacheRule {
35    /// Query pattern to cache
36    pub query:                 String,
37    /// Time-to-live in seconds
38    pub ttl_seconds:           u32,
39    /// Events that trigger cache invalidation
40    pub invalidation_triggers: Vec<String>,
41}
42
43/// Analytics configuration
44#[derive(Debug, Clone, Default, Deserialize, Serialize)]
45#[serde(default, deny_unknown_fields)]
46pub struct AnalyticsConfig {
47    /// Enable analytics
48    #[serde(default)]
49    pub enabled: bool,
50    /// Analytics queries
51    pub queries: Vec<AnalyticsQuery>,
52}
53
54/// Analytics query definition
55#[derive(Debug, Clone, Deserialize, Serialize)]
56#[serde(deny_unknown_fields)]
57pub struct AnalyticsQuery {
58    /// Query name
59    pub name:        String,
60    /// SQL source for the query
61    pub sql_source:  String,
62    /// Query description
63    pub description: Option<String>,
64}