alpm_types/pkg.rs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
use strum::{Display, EnumString};
use crate::Name;
/// The type of a package
///
/// ## Examples
/// ```
/// use std::str::FromStr;
///
/// use alpm_types::PkgType;
///
/// // create PkgType from str
/// assert_eq!(PkgType::from_str("pkg"), Ok(PkgType::Package));
///
/// // format as String
/// assert_eq!("debug", format!("{}", PkgType::Debug));
/// assert_eq!("pkg", format!("{}", PkgType::Package));
/// assert_eq!("src", format!("{}", PkgType::Source));
/// assert_eq!("split", format!("{}", PkgType::Split));
/// ```
#[derive(Copy, Clone, Debug, Display, EnumString, Eq, PartialEq)]
#[non_exhaustive]
pub enum PkgType {
/// a debug package
#[strum(to_string = "debug")]
Debug,
/// a single (non-split) package
#[strum(to_string = "pkg")]
Package,
/// a source-only package
#[strum(to_string = "src")]
Source,
/// one split package out of a set of several
#[strum(to_string = "split")]
Split,
}
/// Description of a package
///
/// This is a type alias for [`String`].
///
/// ## Examples
/// ```
/// use alpm_types::{Error, PkgDesc};
///
/// // Create a PkgDesc
/// let desc: PkgDesc = "A simple package".to_string();
/// ```
pub type PkgDesc = String;
/// Name of the base package information that one or more packages are built from.
///
/// This is a type alias for [`Name`].
///
/// ## Examples
/// ```
/// use std::str::FromStr;
///
/// use alpm_types::{Error, Name};
///
/// # fn main() -> Result<(), alpm_types::Error> {
/// // create PkgBase from &str
/// let pkgbase = Name::from_str("test-123@.foo_+")?;
///
/// // format as String
/// let pkgbase = Name::from_str("foo")?;
/// assert_eq!("foo", pkgbase.to_string());
/// # Ok(())
/// # }
/// ```
pub type PkgBase = Name;
#[cfg(test)]
mod tests {
use std::str::FromStr;
use rstest::rstest;
use super::*;
#[rstest]
#[case("debug", Ok(PkgType::Debug))]
#[case("pkg", Ok(PkgType::Package))]
#[case("src", Ok(PkgType::Source))]
#[case("split", Ok(PkgType::Split))]
#[case("foo", Err(strum::ParseError::VariantNotFound))]
fn pkgtype_from_string(
#[case] from_str: &str,
#[case] result: Result<PkgType, strum::ParseError>,
) {
assert_eq!(PkgType::from_str(from_str), result);
}
#[rstest]
#[case(PkgType::Debug, "debug")]
#[case(PkgType::Package, "pkg")]
#[case(PkgType::Source, "src")]
#[case(PkgType::Split, "split")]
fn pkgtype_format_string(#[case] pkgtype: PkgType, #[case] pkgtype_str: &str) {
assert_eq!(pkgtype_str, format!("{}", pkgtype));
}
}