pub struct PackageFileName {
name: Name,
version: Version,
architecture: Architecture,
compression: Option<CompressionAlgorithmFileExtension>,
}
Expand description
The full filename of a package.
A package filename tracks its Name
, Version
, Architecture
and the optional
CompressionAlgorithmFileExtension
.
Fields§
§name: Name
§version: Version
§architecture: Architecture
§compression: Option<CompressionAlgorithmFileExtension>
Implementations§
Source§impl PackageFileName
impl PackageFileName
Sourcepub fn new(
name: Name,
version: Version,
architecture: Architecture,
compression: Option<CompressionAlgorithmFileExtension>,
) -> Result<Self, Error>
pub fn new( name: Name, version: Version, architecture: Architecture, compression: Option<CompressionAlgorithmFileExtension>, ) -> Result<Self, Error>
Creates a new PackageFileName
.
§Errors
Returns an error if the provided version
does not have the pkgrel
component.
§Examples
use std::str::FromStr;
use alpm_types::PackageFileName;
assert_eq!(
"example-1:1.0.0-1-x86_64.pkg.tar.zst",
PackageFileName::new(
"example".parse()?,
"1:1.0.0-1".parse()?,
"x86_64".parse()?,
Some("zst".parse()?)
)?
.to_string()
);
// This fails because the provided Version does not have the pkgrel component.
assert!(
PackageFileName::new(
"example".parse()?,
"1:1.0.0".parse()?,
"x86_64".parse()?,
Some("zst".parse()?)
)
.is_err()
);
Sourcepub fn version(&self) -> &Version
pub fn version(&self) -> &Version
Returns a reference to the Version
.
§Examples
use std::str::FromStr;
use alpm_types::{PackageFileName, Version};
let file_name = PackageFileName::new(
"example".parse()?,
"1:1.0.0-1".parse()?,
"x86_64".parse()?,
Some("zst".parse()?),
)?;
assert_eq!(file_name.version(), &Version::from_str("1:1.0.0-1")?);
Sourcepub fn architecture(&self) -> Architecture
pub fn architecture(&self) -> Architecture
Returns the Architecture
.
§Examples
use std::str::FromStr;
use alpm_types::{Architecture, PackageFileName};
let file_name = PackageFileName::new(
"example".parse()?,
"1:1.0.0-1".parse()?,
"x86_64".parse()?,
Some("zst".parse()?),
)?;
assert_eq!(file_name.architecture(), Architecture::X86_64);
Sourcepub fn compression(&self) -> Option<CompressionAlgorithmFileExtension>
pub fn compression(&self) -> Option<CompressionAlgorithmFileExtension>
Returns the optional CompressionAlgorithmFileExtension
.
§Examples
use std::str::FromStr;
use alpm_types::{CompressionAlgorithmFileExtension, PackageFileName};
let file_name = PackageFileName::new(
"example".parse()?,
"1:1.0.0-1".parse()?,
"x86_64".parse()?,
Some("zst".parse()?),
)?;
assert_eq!(
file_name.compression(),
Some(CompressionAlgorithmFileExtension::Zstd)
);
Sourcepub fn to_path_buf(&self) -> PathBuf
pub fn to_path_buf(&self) -> PathBuf
Returns the PackageFileName
as PathBuf
.
§Examples
use std::{path::PathBuf, str::FromStr};
use alpm_types::PackageFileName;
let file_name = PackageFileName::new(
"example".parse()?,
"1:1.0.0-1".parse()?,
"x86_64".parse()?,
Some("zst".parse()?),
)?;
assert_eq!(
file_name.to_path_buf(),
PathBuf::from("example-1:1.0.0-1-x86_64.pkg.tar.zst")
);
Sourcepub fn set_compression(
&mut self,
compression: Option<CompressionAlgorithmFileExtension>,
)
pub fn set_compression( &mut self, compression: Option<CompressionAlgorithmFileExtension>, )
Sets the compression of the PackageFileName
.
§Examples
use std::str::FromStr;
use alpm_types::{CompressionAlgorithmFileExtension, PackageFileName};
// Create package file name with compression
let mut file_name = PackageFileName::new(
"example".parse()?,
"1:1.0.0-1".parse()?,
"x86_64".parse()?,
Some("zst".parse()?),
)?;
// Remove the compression
file_name.set_compression(None);
assert!(file_name.compression().is_none());
// Add other compression
file_name.set_compression(Some(CompressionAlgorithmFileExtension::Gzip));
assert!(
file_name
.compression()
.is_some_and(|compression| compression == CompressionAlgorithmFileExtension::Gzip)
);
Sourcepub fn parser(input: &mut &str) -> ModalResult<Self>
pub fn parser(input: &mut &str) -> ModalResult<Self>
Recognizes a PackageFileName
in a string slice.
Relies on [winnow
] to parse input
and recognize the Name
, Version
,
Architecture
and CompressionAlgorithmFileExtension
components.
§Errors
Returns an error if
- the
Name
component can not be recognized, - the
Version
component can not be recognized, - the
Architecture
component can not be recognized, - or the
CompressionAlgorithmFileExtension
component can not be recognized.
§Examples
use alpm_types::PackageFileName;
use winnow::Parser;
let filename = "example-package-1:1.0.0-1-x86_64.pkg.tar.zst";
assert_eq!(
filename,
PackageFileName::parser.parse(filename)?.to_string()
);
Trait Implementations§
Source§impl Clone for PackageFileName
impl Clone for PackageFileName
Source§fn clone(&self) -> PackageFileName
fn clone(&self) -> PackageFileName
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for PackageFileName
impl Debug for PackageFileName
Source§impl<'de> Deserialize<'de> for PackageFileName
impl<'de> Deserialize<'de> for PackageFileName
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl Display for PackageFileName
impl Display for PackageFileName
Source§impl From<PackageFileName> for String
impl From<PackageFileName> for String
Source§fn from(value: PackageFileName) -> Self
fn from(value: PackageFileName) -> Self
Creates a String
from a PackageFileName
.
Source§impl FromStr for PackageFileName
impl FromStr for PackageFileName
Source§fn from_str(s: &str) -> Result<Self, Self::Err>
fn from_str(s: &str) -> Result<Self, Self::Err>
Creates a PackageFileName
from a string slice.
Delegates to PackageFileName::parser
.
§Errors
Returns an error if PackageFileName::parser
fails.
§Examples
use std::str::FromStr;
use alpm_types::PackageFileName;
let filename = "example-package-1:1.0.0-1-x86_64.pkg.tar.zst";
assert_eq!(filename, PackageFileName::from_str(filename)?.to_string());
Source§impl PartialEq for PackageFileName
impl PartialEq for PackageFileName
Source§impl Serialize for PackageFileName
impl Serialize for PackageFileName
Source§impl TryFrom<&Path> for PackageFileName
impl TryFrom<&Path> for PackageFileName
Source§fn try_from(value: &Path) -> Result<Self, Self::Error>
fn try_from(value: &Path) -> Result<Self, Self::Error>
Creates a PackageFileName
from a Path
reference.
The file name in value
is extracted and, if valid is turned into a string slice.
The creation of the PackageFileName
is delegated to PackageFileName::parser
.
§Errors
Returns an error if
value
does not contain a valid file name,value
can not be turned into a string slice,- or
PackageFileName::parser
fails.
§Examples
use std::path::PathBuf;
use alpm_types::PackageFileName;
let filename = PathBuf::from("../example-package-1:1.0.0-1-x86_64.pkg.tar.zst");
assert_eq!(
filename,
PathBuf::from("..").join(PackageFileName::try_from(filename.as_path())?.to_path_buf()),
);
Source§impl TryFrom<String> for PackageFileName
impl TryFrom<String> for PackageFileName
Source§fn try_from(value: String) -> Result<Self, Self::Error>
fn try_from(value: String) -> Result<Self, Self::Error>
Creates a PackageFileName
from a String.
Delegates to PackageFileName::parser
.
§Errors
Returns an error if PackageFileName::parser
fails.
§Examples
use std::str::FromStr;
use alpm_types::PackageFileName;
let filename = "example-package-1:1.0.0-1-x86_64.pkg.tar.zst".to_string();
assert_eq!(
filename.clone(),
PackageFileName::try_from(filename)?.to_string()
);