cypherlite_core/
config.rs1use std::path::PathBuf;
4
5#[derive(Debug, Clone, PartialEq, Eq)]
7pub enum SyncMode {
8 Full,
10 Normal,
12}
13
14#[derive(Debug, Clone)]
16pub struct DatabaseConfig {
17 pub path: PathBuf,
19 pub page_size: u32,
21 pub cache_capacity: usize,
23 pub wal_sync_mode: SyncMode,
25 pub temporal_tracking_enabled: bool,
27 pub version_storage_enabled: bool,
29}
30
31impl Default for DatabaseConfig {
32 fn default() -> Self {
33 Self {
34 path: PathBuf::from("database.cyl"),
35 page_size: 4096,
36 cache_capacity: 256,
37 wal_sync_mode: SyncMode::Full,
38 temporal_tracking_enabled: true,
39 version_storage_enabled: true,
40 }
41 }
42}
43
44impl DatabaseConfig {
45 pub fn wal_path(&self) -> PathBuf {
47 self.path.with_extension("cyl-wal")
48 }
49}
50
51#[cfg(test)]
52mod tests {
53 use super::*;
54
55 #[test]
57 fn test_default_page_size_is_4096() {
58 let config = DatabaseConfig::default();
59 assert_eq!(config.page_size, 4096);
60 }
61
62 #[test]
64 fn test_default_cache_capacity_is_256() {
65 let config = DatabaseConfig::default();
66 assert_eq!(config.cache_capacity, 256);
67 }
68
69 #[test]
71 fn test_default_sync_mode_is_full() {
72 let config = DatabaseConfig::default();
73 assert_eq!(config.wal_sync_mode, SyncMode::Full);
74 }
75
76 #[test]
77 fn test_default_path() {
78 let config = DatabaseConfig::default();
79 assert_eq!(config.path, PathBuf::from("database.cyl"));
80 }
81
82 #[test]
84 fn test_wal_path_derivation() {
85 let config = DatabaseConfig {
86 path: PathBuf::from("/tmp/test.cyl"),
87 ..Default::default()
88 };
89 assert_eq!(config.wal_path(), PathBuf::from("/tmp/test.cyl-wal"));
90 }
91
92 #[test]
94 fn test_custom_cache_capacity() {
95 let config = DatabaseConfig {
96 cache_capacity: 1024,
97 ..Default::default()
98 };
99 assert_eq!(config.cache_capacity, 1024);
100 }
101
102 #[test]
104 fn test_default_temporal_tracking_enabled() {
105 let config = DatabaseConfig::default();
106 assert!(config.temporal_tracking_enabled);
107 }
108
109 #[test]
111 fn test_temporal_tracking_can_be_disabled() {
112 let config = DatabaseConfig {
113 temporal_tracking_enabled: false,
114 ..Default::default()
115 };
116 assert!(!config.temporal_tracking_enabled);
117 }
118
119 #[test]
121 fn test_default_version_storage_enabled() {
122 let config = DatabaseConfig::default();
123 assert!(config.version_storage_enabled);
124 }
125
126 #[test]
128 fn test_version_storage_can_be_disabled() {
129 let config = DatabaseConfig {
130 version_storage_enabled: false,
131 ..Default::default()
132 };
133 assert!(!config.version_storage_enabled);
134 }
135
136 #[test]
137 fn test_config_clone() {
138 let config = DatabaseConfig::default();
139 let cloned = config.clone();
140 assert_eq!(cloned.page_size, config.page_size);
141 assert_eq!(cloned.cache_capacity, config.cache_capacity);
142 }
143}