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