agglayer_config/storage/
backup.rs

1use std::path::PathBuf;
2
3use serde::{Deserialize, Serialize};
4
5/// Configuration for Storage backups.
6#[derive(Default, Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
7#[serde(rename_all = "kebab-case")]
8pub enum BackupConfig {
9    /// Backups are disabled.
10    #[default]
11    Disabled,
12
13    /// Backups are enabled.
14    #[serde(untagged, rename_all = "kebab-case")]
15    Enabled {
16        /// Path to the directory where backups are stored.
17        path: PathBuf,
18        /// Maximum number of backups to keep for the state storage.
19        #[serde(default = "default_max_backup_number")]
20        state_max_backup_count: usize,
21        /// Maximum number of backups to keep for the pending storage.
22        #[serde(default = "default_max_backup_number")]
23        pending_max_backup_count: usize,
24    },
25}
26
27impl BackupConfig {
28    /// Default maximum number of backups to keep.
29    const DEFAULT_MAX_BACKUP_NUMBER: usize = 100;
30
31    pub fn with_path<P: Into<PathBuf>>(path: P) -> Self {
32        BackupConfig::Enabled {
33            path: path.into(),
34            state_max_backup_count: default_max_backup_number(),
35            pending_max_backup_count: default_max_backup_number(),
36        }
37    }
38
39    pub fn is_disabled(&self) -> bool {
40        *self == BackupConfig::Disabled
41    }
42}
43
44const fn default_max_backup_number() -> usize {
45    BackupConfig::DEFAULT_MAX_BACKUP_NUMBER
46}