Enum PackageInfoSchema

Source
pub enum PackageInfoSchema {
    V1(SchemaVersion),
    V2(SchemaVersion),
}
Expand description

An enum tracking all available PKGINFO schemas.

The schema of a PKGINFO refers to its available fields in a specific version.

Variants§

Trait Implementations§

Source§

impl Clone for PackageInfoSchema

Source§

fn clone(&self) -> PackageInfoSchema

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for PackageInfoSchema

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for PackageInfoSchema

Source§

fn default() -> Self

Returns the default PackageInfoSchema variant (PackageInfoSchema::V2).

Source§

impl Display for PackageInfoSchema

Source§

fn fmt(&self, fmt: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl FileFormatSchema for PackageInfoSchema

Source§

fn inner(&self) -> &SchemaVersion

Returns a reference to the inner SchemaVersion.

Source§

fn derive_from_file(file: impl AsRef<Path>) -> Result<Self, Error>
where Self: Sized,

Derives a PackageInfoSchema from a PKGINFO file.

Opens the file and defers to PackageInfoSchema::derive_from_reader.

§Errors

Returns an error if

  • opening file for reading fails
  • or deriving a PackageInfoSchema from the contents of file fails.
Source§

fn derive_from_reader(reader: impl Read) -> Result<Self, Error>
where Self: Sized,

Derives a PackageInfoSchema from PKGINFO data in a reader.

Reads the reader to string and defers to PackageInfoSchema::derive_from_str.

§Errors

Returns an error if

Source§

fn derive_from_str(s: &str) -> Result<PackageInfoSchema, Error>

Derives a PackageInfoSchema from a string slice containing PKGINFO data.

Since the PKGINFO format does not carry any version information, this function looks for the first xdata field (if any) to determine whether the input may be PKGINFOv2. If no xdata field is found, PKGINFOv1 is assumed.

§Examples
use alpm_common::FileFormatSchema;
use alpm_pkginfo::PackageInfoSchema;
use alpm_types::{SchemaVersion, semver_version::Version};

let pkginfo_v2 = r#"
pkgname = example
pkgbase = example
pkgver = 1:1.0.0-1
pkgdesc = A project that does something
url = https://example.org/
builddate = 1729181726
packager = John Doe <john@example.org>
size = 181849963
arch = any
xdata = pkgtype=pkg
"#;
assert_eq!(
    PackageInfoSchema::V2(SchemaVersion::new(Version::new(2, 0, 0))),
    PackageInfoSchema::derive_from_str(pkginfo_v2)?
);

let pkginfo_v1 = r#"
pkgname = example
pkgbase = example
pkgver = 1:1.0.0-1
pkgdesc = A project that does something
url = https://example.org/
builddate = 1729181726
packager = John Doe <john@example.org>
size = 181849963
arch = any
"#;
assert_eq!(
    PackageInfoSchema::V1(SchemaVersion::new(Version::new(1, 0, 0))),
    PackageInfoSchema::derive_from_str(pkginfo_v1)?
);
§Errors

Returns an error if

  • the first xdata keyword is assigned an empty string,
  • or the first xdata keyword does not assign “pkgtype”.
Source§

type Err = Error

The Error type to use.
Source§

impl FromStr for PackageInfoSchema

Source§

fn from_str(s: &str) -> Result<PackageInfoSchema, Self::Err>

Creates a PackageInfoSchema from string slice s.

Relies on SchemaVersion::from_str to create a corresponding PackageInfoSchema from s.

§Errors

Returns an error if

Source§

type Err = Error

The associated error which can be returned from parsing.
Source§

impl MetadataFile<PackageInfoSchema> for PackageInfo

Source§

fn from_file_with_schema( file: impl AsRef<Path>, schema: Option<PackageInfoSchema>, ) -> Result<Self, Error>

Creates a PackageInfo from file, optionally validated using a PackageInfoSchema.

Opens the file and defers to PackageInfo::from_reader_with_schema.

§Note

To automatically derive the PackageInfoSchema, use PackageInfo::from_file.

§Examples
use std::{fs::File, io::Write};

use alpm_common::{FileFormatSchema, MetadataFile};
use alpm_pkginfo::{PackageInfo, PackageInfoSchema};
use alpm_types::{SchemaVersion, semver_version::Version};

// Prepare a file with PKGINFO data
let (file, pkginfo_data) = {
    let pkginfo_data = r#"pkgname = example
pkgbase = example
xdata = pkgtype=pkg
pkgver = 1:1.0.0-1
pkgdesc = A project that does something
url = https://example.org/
builddate = 1729181726
packager = John Doe <john@example.org>
size = 181849963
arch = any
"#;
    let pkginfo_file = tempfile::NamedTempFile::new()?;
    let mut output = File::create(&pkginfo_file)?;
    write!(output, "{}", pkginfo_data)?;
    (pkginfo_file, pkginfo_data)
};

let pkginfo = PackageInfo::from_file_with_schema(
    file.path().to_path_buf(),
    Some(PackageInfoSchema::V2(SchemaVersion::new(Version::new(
        2, 0, 0,
    )))),
)?;
assert_eq!(pkginfo.to_string(), pkginfo_data);
§Errors

Returns an error if

  • the file cannot be opened for reading,
  • no variant of PackageInfo can be constructed from the contents of file,
  • or schema is Some and the PackageInfoSchema does not match the contents of file.
Source§

fn from_reader_with_schema( reader: impl Read, schema: Option<PackageInfoSchema>, ) -> Result<Self, Error>

Creates a PackageInfo from a reader, optionally validated using a PackageInfoSchema.

Reads the reader to string and defers to PackageInfo::from_str_with_schema.

§Note

To automatically derive the PackageInfoSchema, use PackageInfo::from_reader.

§Examples
use std::{fs::File, io::Write};

use alpm_common::MetadataFile;
use alpm_pkginfo::{PackageInfo, PackageInfoSchema};
use alpm_types::{SchemaVersion, semver_version::Version};

// Prepare a reader with PKGINFO data
let (reader, pkginfo_data) = {
    let pkginfo_data = r#"pkgname = example
pkgbase = example
xdata = pkgtype=pkg
pkgver = 1:1.0.0-1
pkgdesc = A project that does something
url = https://example.org/
builddate = 1729181726
packager = John Doe <john@example.org>
size = 181849963
arch = any
"#;
    let pkginfo_file = tempfile::NamedTempFile::new()?;
    let mut output = File::create(&pkginfo_file)?;
    write!(output, "{}", pkginfo_data)?;
    (File::open(&pkginfo_file.path())?, pkginfo_data)
};

let pkginfo = PackageInfo::from_reader_with_schema(
    reader,
    Some(PackageInfoSchema::V2(SchemaVersion::new(Version::new(
        2, 0, 0,
    )))),
)?;
assert_eq!(pkginfo.to_string(), pkginfo_data);
§Errors

Returns an error if

  • the reader cannot be read to string,
  • no variant of PackageInfo can be constructed from the contents of the reader,
  • or schema is Some and the PackageInfoSchema does not match the contents of the reader.
Source§

fn from_str_with_schema( s: &str, schema: Option<PackageInfoSchema>, ) -> Result<Self, Error>

Creates a PackageInfo from string slice, optionally validated using a PackageInfoSchema.

If schema is None attempts to detect the PackageInfoSchema from s. Attempts to create a PackageInfo variant that corresponds to the PackageInfoSchema.

§Note

To automatically derive the PackageInfoSchema, use PackageInfo::from_str.

§Examples
use std::{fs::File, io::Write};

use alpm_common::MetadataFile;
use alpm_pkginfo::{PackageInfo, PackageInfoSchema};
use alpm_types::{SchemaVersion, semver_version::Version};

let pkginfo_v2_data = r#"pkgname = example
pkgbase = example
xdata = pkgtype=pkg
pkgver = 1:1.0.0-1
pkgdesc = A project that does something
url = https://example.org/
builddate = 1729181726
packager = John Doe <john@example.org>
size = 181849963
arch = any
"#;

let pkginfo_v2 = PackageInfo::from_str_with_schema(
    pkginfo_v2_data,
    Some(PackageInfoSchema::V2(SchemaVersion::new(Version::new(
        2, 0, 0,
    )))),
)?;
assert_eq!(pkginfo_v2.to_string(), pkginfo_v2_data);

let pkginfo_v1_data = r#"pkgname = example
pkgbase = example
pkgver = 1:1.0.0-1
pkgdesc = A project that does something
url = https://example.org/
builddate = 1729181726
packager = John Doe <john@example.org>
size = 181849963
arch = any
"#;

let pkginfo_v1 = PackageInfo::from_str_with_schema(
    pkginfo_v1_data,
    Some(PackageInfoSchema::V1(SchemaVersion::new(Version::new(
        1, 0, 0,
    )))),
)?;
assert_eq!(pkginfo_v1.to_string(), pkginfo_v1_data);
§Errors

Returns an error if

Source§

type Err = Error

The Error type to use.
Source§

fn from_file(file: impl AsRef<Path>) -> Result<Self, Self::Err>
where Self: Sized,

Creates Self from file. Read more
Source§

fn from_stdin() -> Result<Self, Self::Err>
where Self: Sized,

Creates Self from stdin. Read more
Source§

fn from_stdin_with_schema(schema: Option<T>) -> Result<Self, Self::Err>
where Self: Sized,

Creates Self from stdin, optionally validated by a schema. Read more
Source§

fn from_reader(reader: impl Read) -> Result<Self, Self::Err>
where Self: Sized,

Creates Self from a Read implementer. Read more
Source§

impl PartialEq for PackageInfoSchema

Source§

fn eq(&self, other: &PackageInfoSchema) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl TryFrom<SchemaVersion> for PackageInfoSchema

Source§

fn try_from(value: SchemaVersion) -> Result<Self, Self::Error>

Converts a SchemaVersion to a PackageInfoSchema.

§Errors

Returns an error if the SchemaVersion’s inner Version does not provide a major version that corresponds to a PackageInfoSchema variant.

Source§

type Error = Error

The type returned in the event of a conversion error.
Source§

impl Eq for PackageInfoSchema

Source§

impl StructuralPartialEq for PackageInfoSchema

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> ErasedDestructor for T
where T: 'static,

§

impl<T> MaybeSendSync for T