azoth_core/config/
projection.rs1use super::canonical::ReadPoolConfig;
2use serde::{Deserialize, Serialize};
3use std::path::PathBuf;
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
7pub struct ProjectionConfig {
8 pub path: PathBuf,
10
11 #[serde(default = "default_wal_mode")]
14 pub wal_mode: bool,
15
16 #[serde(default)]
18 pub synchronous: SynchronousMode,
19
20 #[serde(default = "default_schema_version")]
23 pub schema_version: u32,
24
25 #[serde(default = "default_cache_size")]
28 pub cache_size: i32,
29
30 #[serde(default = "default_read_pool")]
36 pub read_pool: ReadPoolConfig,
37}
38
39#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Default)]
40pub enum SynchronousMode {
41 Full,
43 #[default]
45 Normal,
46 Off,
48}
49
50fn default_wal_mode() -> bool {
51 true
52}
53
54fn default_schema_version() -> u32 {
55 1
56}
57
58fn default_cache_size() -> i32 {
59 -64000 }
61
62fn default_read_pool() -> ReadPoolConfig {
63 ReadPoolConfig::enabled(4)
64}
65
66impl ProjectionConfig {
67 pub fn new(path: PathBuf) -> Self {
68 Self {
69 path,
70 wal_mode: default_wal_mode(),
71 synchronous: SynchronousMode::default(),
72 schema_version: default_schema_version(),
73 cache_size: default_cache_size(),
74 read_pool: default_read_pool(),
75 }
76 }
77
78 pub fn with_synchronous(mut self, synchronous: SynchronousMode) -> Self {
79 self.synchronous = synchronous;
80 self
81 }
82
83 pub fn with_wal_mode(mut self, wal_mode: bool) -> Self {
84 self.wal_mode = wal_mode;
85 self
86 }
87
88 pub fn with_read_pool(mut self, config: ReadPoolConfig) -> Self {
90 self.read_pool = config;
91 self
92 }
93
94 pub fn with_read_pool_size(mut self, pool_size: usize) -> Self {
96 self.read_pool = ReadPoolConfig::enabled(pool_size);
97 self
98 }
99}