Skip to main content

genja_core/settings/
core.rs

1use super::env_defaults::{deserialize_bool_loose, raise_on_error};
2use serde::{Deserialize, Serialize};
3
4/// Core runtime behavior settings.
5///
6/// `raise_on_error` defaults from `GENJA_CORE_RAISE_ON_ERROR` and accepts the
7/// same loose boolean forms used elsewhere in the settings module.
8#[derive(Deserialize, Serialize, Clone, Debug)]
9pub struct CoreConfig {
10    #[serde(
11        default = "raise_on_error",
12        deserialize_with = "deserialize_bool_loose"
13    )]
14    raise_on_error: bool,
15}
16
17impl Default for CoreConfig {
18    fn default() -> Self {
19        CoreConfig {
20            raise_on_error: raise_on_error(),
21        }
22    }
23}
24
25impl CoreConfig {
26    pub fn builder() -> CoreConfigBuilder {
27        CoreConfigBuilder::default()
28    }
29
30    pub fn raise_on_error(&self) -> bool {
31        self.raise_on_error
32    }
33}
34
35/// Builder for `CoreConfig`.
36#[derive(Default)]
37pub struct CoreConfigBuilder {
38    raise_on_error: Option<bool>,
39}
40
41impl CoreConfigBuilder {
42    pub fn raise_on_error(mut self, raise_on_error: bool) -> Self {
43        self.raise_on_error = Some(raise_on_error);
44        self
45    }
46
47    pub fn build(self) -> CoreConfig {
48        CoreConfig {
49            raise_on_error: self.raise_on_error.unwrap_or_else(raise_on_error),
50        }
51    }
52}