use super::*;
use serde::Serialize;
use serde::Deserialize;
use toml;
use indexmap::IndexMap;
use chrono::Duration;
use strum;
use strum_macros;
#[derive(Serialize, Deserialize, Clone, Copy, strum_macros::EnumString)]
enum RepoFormat {
#[strum(serialize="rpm-md",serialize="rpm")]
RepoMD,
}
impl Default for RepoFormat {
fn default() -> Self {
Self::RepoMD
}
}
#[derive(Serialize, Deserialize, Clone, Default)]
struct RepoFileBlock {
name: String,
baseurl: Option<Url>,
metalink: Option<Url>,
#[serde(default)]
enabled: bool,
#[serde(default)]
protect: bool,
#[serde(default)]
gpgcheck: bool,
metadata_expire: u64, #[serde(default)]
autorefresh: bool,
#[serde(default,alias="type")]
format: RepoFormat,
}
#[derive(Serialize, Deserialize, Clone)]
struct RepoFile {
pub multi: IndexMap<String, RepoFileBlock>,
}
impl RepoFile {
fn as_toml(&self) -> Result<String> {
Ok(toml::to_string(self)?)
}
}
#[cfg(test)]
mod tests {
use super::*;
const SAMPLE_1: &'static str = r#"
[fedora]
name=Fedora $releasever - $basearch
#baseurl=http://download.example/pub/fedora/linux/releases/$releasever/Everything/$basearch/os/
metalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch
enabled=1
countme=1
metadata_expire=7d
repo_gpgcheck=0
type=rpm
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch
skip_if_unavailable=False
"#;
const SAMPLE_2: &'static str = r#"
[nexus-production]
name=Production Repository
baseurl=http://localhost:8081/nexus/service/local/yum/repos/releases/production/
enabled=1
protect=0
gpgcheck=0
metadata_expire=30s
autorefresh=1
type=rpm-md
Promote RPM through Stages "#;
#[test]
fn test_name() {
}
}