#[cfg(feature = "serde")]
use ::serde::{Deserialize, Serialize};
use super::YesNoForce;
use crate::control::{Architectures, SpaceDelimitedStrings};
#[derive(Clone, Debug, PartialEq)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", serde(rename_all = "PascalCase"))]
pub struct SourcesList {
pub enabled: Option<bool>,
pub types: SpaceDelimitedStrings,
#[cfg_attr(feature = "serde", serde(rename = "URIs"))]
pub uris: SpaceDelimitedStrings,
pub suites: SpaceDelimitedStrings,
pub components: SpaceDelimitedStrings,
pub architectures: Option<Architectures>,
pub languages: Option<SpaceDelimitedStrings>,
pub targets: Option<SpaceDelimitedStrings>,
#[cfg_attr(feature = "serde", serde(rename = "PDiffs"))]
pub pdiffs: Option<bool>,
#[cfg_attr(feature = "serde", serde(rename = "By-Hash"))]
pub by_hash: Option<YesNoForce>,
#[cfg_attr(feature = "serde", serde(rename = "Allow-Insecure"))]
pub allow_insecure: Option<bool>,
#[cfg_attr(feature = "serde", serde(rename = "Allow-Weak"))]
pub allow_weak: Option<bool>,
#[cfg_attr(feature = "serde", serde(rename = "Allow-Downgrade-To-Insecure"))]
pub allow_downgrade_to_insecure: Option<bool>,
pub trusted: Option<bool>,
#[cfg_attr(feature = "serde", serde(rename = "Signed-By"))]
pub signed_by: Option<String>,
#[cfg_attr(feature = "serde", serde(rename = "Check-Valid-Until"))]
pub check_valid_until: Option<bool>,
#[cfg_attr(feature = "serde", serde(rename = "Valid-Until-Min"))]
pub valid_until_min: Option<usize>,
#[cfg_attr(feature = "serde", serde(rename = "Valid-Until-Max"))]
pub valid_until_max: Option<usize>,
#[cfg_attr(feature = "serde", serde(rename = "Check-Date"))]
pub check_date: Option<bool>,
#[cfg_attr(feature = "serde", serde(rename = "Date-Max-Future"))]
pub date_max_future: Option<usize>,
#[cfg_attr(feature = "serde", serde(rename = "InRelease-Path"))]
pub inrelease_path: Option<String>,
pub snapshot: Option<String>,
}
#[cfg(test)]
mod tests {
#[cfg(feature = "serde")]
use super::*;
#[cfg(feature = "serde")]
mod serde {
use super::*;
use crate::{architecture, control::de};
macro_rules! test_sources_list {
($name:ident, $data:expr, |$parsed:ident| $block:tt) => {
#[test]
fn $name() {
let $parsed = de::from_str::<SourcesList>($data).unwrap();
$block
}
};
}
test_sources_list!(
apt_manpage_example_1,
"\
Types: deb
URIs: http://deb.debian.org/debian
Suites: bookworm bookworm-updates
Components: main contrib non-free non-free-firmware
",
|sources| {
assert_eq!(&["deb"], &*sources.types);
assert_eq!(&["http://deb.debian.org/debian"], &*sources.uris);
assert_eq!(&["bookworm", "bookworm-updates"], &*sources.suites);
assert_eq!(
&["main", "contrib", "non-free", "non-free-firmware"],
&*sources.components
);
}
);
test_sources_list!(
apt_manpage_signed_by,
"\
Types: deb
URIs: https://deb.debian.org
Suites: stable
Components: main contrib non-free non-free-firmware
Signed-By:
-----BEGIN PGP PUBLIC KEY BLOCK-----
.
mDMEYCQjIxYJKwYBBAHaRw8BAQdAD/P5Nvvnvk66SxBBHDbhRml9ORg1WV5CvzKY
CuMfoIS0BmFiY2RlZoiQBBMWCgA4FiEErCIG1VhKWMWo2yfAREZd5NfO31cFAmAk
IyMCGyMFCwkIBwMFFQoJCAsFFgIDAQACHgECF4AACgkQREZd5NfO31fbOwD6ArzS
dM0Dkd5h2Ujy1b6KcAaVW9FOa5UNfJ9FFBtjLQEBAJ7UyWD3dZzhvlaAwunsk7DG
3bHcln8DMpIJVXht78sL
=IE0r
-----END PGP PUBLIC KEY BLOCK-----
",
|sources| {
assert!(
sources
.signed_by
.unwrap()
.trim()
.starts_with("-----BEGIN PGP PUBLIC KEY BLOCK-----")
);
}
);
test_sources_list!(
apt_manpage_example_2,
"\
Types: deb
URIs: http://deb.debian.org/debian
Suites: bookworm
Components: main
Architectures: amd64 armel
",
|sources| {
assert_eq!(
&[architecture::AMD64, architecture::ARMEL],
&*sources.architectures.unwrap()
);
}
);
test_sources_list!(
apt_bool_one,
"\
Types: deb
URIs: http://deb.debian.org/debian
Suites: bookworm
Components: main
Architectures: amd64 armel
Allow-Insecure: yes
",
|sources| {
assert!(sources.allow_insecure.unwrap());
}
);
}
}