use serde::Deserialize; /// Configuration structure for the backup system. #[derive(Debug, Clone, Deserialize)] pub struct Config { /// Optional script to run before starting the backup process. pub start_script: Option, /// Optional script to run after completing the backup process. pub end_script: Option, /// Configuration for rsync jobs. pub rsync: Option>, /// Configuration for Borg backup jobs. pub borg: Option>, /// Configuration for Borg check jobs to verify repository integrity. pub borg_check: Option>, /// Configuration for Borg prune jobs to manage repository snapshots. pub borg_prune: Option>, /// Configuration for Borg backup jobs. pub restic: Option>, } /// Configuration for an individual rsync job. #[derive(Debug, Clone, Deserialize)] pub struct RsyncConfig { /// Source path for rsync. pub src: String, /// Destination path for rsync. pub dest: String, /// List of patterns to exclude from synchronization. pub exclude: Option>, /// Whether to delete files at the destination that are not in the source. pub delete: Option, /// Ensure a specific directory exists before running the rsync job. pub ensure_exists: Option, /// Create CephFS snapshot before the rsync job. pub cephfs_snap: Option, } /// Configuration for an individual Borg backup job. #[derive(Debug, Clone, Deserialize)] pub struct BorgConfig { /// Borg repository path. pub repo: String, /// Optional passphrase for the repository. pub passphrase: Option, /// List of source paths to include in the backup. pub src: Vec, /// List of patterns to exclude from the backup. pub exclude: Option>, /// List of marker files; directories containing these will be excluded. pub exclude_if_present: Option>, /// Whether to limit the backup to a single filesystem. pub one_file_system: Option, /// Whether to backup ctime pub ctime: Option, /// Disable backup of ACLs (Access Control Lists). pub no_acls: Option, /// Disable backup of extended attributes. pub no_xattrs: Option, /// Optional comment to associate with the backup. pub comment: Option, /// Compression mode to use for the backup. pub compression: Option, /// Ensure a specific directory exists before running the backup. pub ensure_exists: Option, /// Create CephFS snapshots before the backup. pub cephfs_snap: Option, /// Bind mount to consistent path pub same_path: Option, } /// Configuration for a Borg repository integrity check job. #[derive(Debug, Clone, Deserialize)] pub struct BorgCheckConfig { /// Borg repository path. pub repo: String, /// Whether to verify the repository's data integrity. pub verify_data: Option, /// Whether to attempt repairs on detected issues. pub repair: Option, } /// Configuration for a Borg repository pruning job. #[derive(Debug, Clone, Deserialize)] pub struct BorgPruneConfig { /// Borg repository path. pub repo: String, /// Passphrase for accessing the repository. pub passphrase: String, /// Retain all archives within this time period. pub keep_within: String, /// Retain the last `n` archives. pub keep_last: Option, /// Retain the last `n` secondly archives. pub keep_secondly: Option, /// Retain the last `n` minutely archives. pub keep_minutely: Option, /// Retain the last `n` hourly archives. pub keep_hourly: Option, /// Retain the last `n` daily archives. pub keep_daily: Option, /// Retain the last `n` weekly archives. pub keep_weekly: Option, /// Retain the last `n` monthly archives. pub keep_monthly: Option, /// Retain the last `n` yearly archives. pub keep_yearly: Option, } // TODO : restic support /// Configuration for an individual restic backup job. #[derive(Debug, Clone, Deserialize)] pub struct ResticConfig { /// Borg repository path. pub repo: String, /// Optional passphrase for the repository. pub passphrase: String, /// List of source paths to include in the backup. pub src: Vec, /// List of patterns to exclude from the backup. pub exclude: Option>, /// Cache directories marked with CACHEDIR.TAG will be excluded pub exclude_caches: Option, /// Reread all files even if unchanged pub reread: Option, /// List of marker files; directories containing these will be excluded. pub exclude_if_present: Option>, /// Whether to limit the backup to a single filesystem. pub one_file_system: Option, /// Read concurrency pub concurrency: Option, /// Optional comment to associate with the backup. pub tags: Option>, /// Compression mode to use for the backup. // TODO : pub compression: Option, /// Ensure a specific directory exists before running the backup. pub ensure_exists: Option, /// Create CephFS snapshots before the backup. pub cephfs_snap: Option, /// Bind mount to consistent path pub same_path: Option, }