Skip to main content

do_memory_storage_turso/lib_impls/
config.rs

1//! Turso Configuration
2//!
3//! This module contains the TursoConfig struct and its implementation.
4
5/// Configuration for Turso storage
6#[derive(Debug, Clone)]
7pub struct TursoConfig {
8    /// Maximum retry attempts for failed operations
9    pub max_retries: u32,
10    /// Base delay for exponential backoff (milliseconds)
11    pub retry_base_delay_ms: u64,
12    /// Maximum delay for exponential backoff (milliseconds)
13    pub retry_max_delay_ms: u64,
14    /// Enable connection pooling
15    pub enable_pooling: bool,
16    /// Enable keep-alive connection pool (reduces connection overhead)
17    #[cfg(feature = "keepalive-pool")]
18    pub enable_keepalive: bool,
19    /// Keep-alive interval (seconds)
20    #[cfg(feature = "keepalive-pool")]
21    pub keepalive_interval_secs: u64,
22    /// Stale connection threshold (seconds)
23    #[cfg(feature = "keepalive-pool")]
24    pub stale_threshold_secs: u64,
25    /// Compression threshold in bytes (default: 1024 = 1KB)
26    /// Payloads smaller than this won't be compressed
27    /// Only used when compression feature is enabled
28    pub compression_threshold: usize,
29    /// Enable compression for episodes (default: true)
30    /// Only used when compression feature is enabled
31    pub compress_episodes: bool,
32    /// Enable compression for patterns (default: true)
33    /// Only used when compression feature is enabled
34    pub compress_patterns: bool,
35    /// Enable compression for embeddings (default: true)
36    /// Only used when compression feature is enabled
37    pub compress_embeddings: bool,
38    /// Compression level for zstd (1-22, default: 3)
39    /// 1 = fastest, 22 = best compression
40    /// Only used when compression feature is enabled
41    pub compression_level: i32,
42    /// Enable transport compression for network operations (default: true)
43    ///
44    /// **Architectural Note**: This flag is reserved for future custom transport implementations.
45    /// It is NOT currently wired into TursoStorage because libsql handles its own transport layer
46    /// internally. Compression IS applied at the data layer (embedding storage) via the
47    /// `compress()`/`decompress()` functions.
48    ///
49    /// For details, see `tests/runtime_wiring_transport_compression.rs` which documents:
50    /// - CompressedTransport is a standalone utility for custom Transport implementations
51    /// - TursoStorage uses libsql::Database directly, not the Transport trait
52    /// - Data-layer compression (at embedding level) is the correct architectural approach
53    #[cfg(feature = "compression")]
54    pub enable_transport_compression: bool,
55    /// Cache configuration for performance optimization
56    /// When None, caching is disabled (default: Some(CacheConfig::default()))
57    pub cache_config: Option<crate::cache::CacheConfig>,
58}
59
60impl Default for TursoConfig {
61    fn default() -> Self {
62        Self {
63            max_retries: 3,
64            retry_base_delay_ms: 100,
65            retry_max_delay_ms: 5000,
66            enable_pooling: true,
67            #[cfg(feature = "keepalive-pool")]
68            enable_keepalive: true,
69            #[cfg(feature = "keepalive-pool")]
70            keepalive_interval_secs: 30,
71            #[cfg(feature = "keepalive-pool")]
72            stale_threshold_secs: 60,
73            // Compression settings (always present, only used when compression feature is enabled)
74            compression_threshold: 1024,
75            compress_episodes: true,
76            compress_patterns: true,
77            compress_embeddings: true,
78            compression_level: 3, // Default zstd level (good balance of speed/ratio)
79            #[cfg(feature = "compression")]
80            enable_transport_compression: true,
81            // Cache configuration (enabled by default)
82            cache_config: Some(crate::cache::CacheConfig::default()),
83        }
84    }
85}