]> git.proxmox.com Git - proxmox-backup.git/blame - pbs-client/src/backup_specification.rs
backup-client: mount: fix read of larger files
[proxmox-backup.git] / pbs-client / src / backup_specification.rs
CommitLineData
7cc3473a
DM
1use anyhow::{bail, Error};
2
6ef1b649 3use proxmox_schema::*;
7cc3473a 4
6ef1b649 5const_regex! {
7cc3473a
DM
6 BACKUPSPEC_REGEX = r"^([a-zA-Z0-9_-]+\.(pxar|img|conf|log)):(.+)$";
7}
8
bdfa6370
TL
9pub const BACKUP_SOURCE_SCHEMA: Schema =
10 StringSchema::new("Backup source specification ([<label>:<path>]).")
11 .format(&ApiStringFormat::Pattern(&BACKUPSPEC_REGEX))
12 .schema();
13
14pub enum BackupSpecificationType {
15 PXAR,
16 IMAGE,
17 CONFIG,
18 LOGFILE,
19}
7cc3473a
DM
20
21pub struct BackupSpecification {
bdfa6370 22 pub archive_name: String, // left part
7cc3473a
DM
23 pub config_string: String, // right part
24 pub spec_type: BackupSpecificationType,
25}
26
27pub fn parse_backup_specification(value: &str) -> Result<BackupSpecification, Error> {
7cc3473a
DM
28 if let Some(caps) = (BACKUPSPEC_REGEX.regex_obj)().captures(value) {
29 let archive_name = caps.get(1).unwrap().as_str().into();
30 let extension = caps.get(2).unwrap().as_str();
bdfa6370 31 let config_string = caps.get(3).unwrap().as_str().into();
7cc3473a
DM
32 let spec_type = match extension {
33 "pxar" => BackupSpecificationType::PXAR,
34 "img" => BackupSpecificationType::IMAGE,
35 "conf" => BackupSpecificationType::CONFIG,
36 "log" => BackupSpecificationType::LOGFILE,
37 _ => bail!("unknown backup source type '{}'", extension),
38 };
bdfa6370
TL
39 return Ok(BackupSpecification {
40 archive_name,
41 config_string,
42 spec_type,
43 });
7cc3473a
DM
44 }
45
46 bail!("unable to parse backup source specification '{}'", value);
47}