pub enum MtreeSchema {
V1(SchemaVersion),
V2(SchemaVersion),
}
Expand description
An enum tracking all available ALPM-MTREE schemas.
The schema of a ALPM-MTREE refers to its available fields in a specific version.
Variants§
V1(SchemaVersion)
V2(SchemaVersion)
Trait Implementations§
Source§impl Clone for MtreeSchema
impl Clone for MtreeSchema
Source§fn clone(&self) -> MtreeSchema
fn clone(&self) -> MtreeSchema
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for MtreeSchema
impl Debug for MtreeSchema
Source§impl Default for MtreeSchema
impl Default for MtreeSchema
Source§fn default() -> Self
fn default() -> Self
Returns the default MtreeSchema
variant (MtreeSchema::V2
).
Source§impl Display for MtreeSchema
impl Display for MtreeSchema
Source§impl FileFormatSchema for MtreeSchema
impl FileFormatSchema for MtreeSchema
Source§fn inner(&self) -> &SchemaVersion
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,
fn derive_from_file(file: impl AsRef<Path>) -> Result<Self, Error>where
Self: Sized,
Derives an MtreeSchema
from an ALPM-MTREE file.
Opens the file
and defers to MtreeSchema::derive_from_reader
.
§Errors
Returns an error if
- opening
file
for reading fails - or deriving a
MtreeSchema
from the contents offile
fails.
Source§fn derive_from_reader(reader: impl Read) -> Result<Self, Error>where
Self: Sized,
fn derive_from_reader(reader: impl Read) -> Result<Self, Error>where
Self: Sized,
Derives an MtreeSchema
from ALPM-MTREE data in a reader
.
Reads the reader
to string and defers to MtreeSchema::derive_from_str
.
§Errors
Returns an error if
- reading a
String
fromreader
fails - or deriving a
MtreeSchema
from the contents ofreader
fails.
Source§fn derive_from_str(s: &str) -> Result<MtreeSchema, Error>
fn derive_from_str(s: &str) -> Result<MtreeSchema, Error>
Derives an MtreeSchema
from a string slice containing ALPM-MTREE data.
Since the ALPM-MTREE format does not carry any version information, this function checks
whether s
contains md5=
or md5digest=
.
If it does, the input is considered to be ALPM-MTREEv2.
If the strings are not found, ALPM-MTREEv1 is assumed.
§Examples
use alpm_common::FileFormatSchema;
use alpm_mtree::MtreeSchema;
use alpm_types::{SchemaVersion, semver_version::Version};
let mtree_v2 = r#"
#mtree
/set mode=644 uid=0 gid=0 type=file
./some_file time=1700000000.0 size=1337 sha256digest=0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
./some_link type=link link=some_file time=1700000000.0
./some_dir type=dir time=1700000000.0
"#;
assert_eq!(
MtreeSchema::V2(SchemaVersion::new(Version::new(2, 0, 0))),
MtreeSchema::derive_from_str(mtree_v2)?
);
let mtree_v1 = r#"
#mtree
/set mode=644 uid=0 gid=0 type=file
./some_file time=1700000000.0 size=1337 sha256digest=0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef md5digest=d3b07384d113edec49eaa6238ad5ff00
./some_link type=link link=some_file time=1700000000.0
./some_dir type=dir time=1700000000.0
"#;
assert_eq!(
MtreeSchema::V1(SchemaVersion::new(Version::new(1, 0, 0))),
MtreeSchema::derive_from_str(mtree_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§impl From<BsdtarOptions> for MtreeSchema
impl From<BsdtarOptions> for MtreeSchema
Source§fn from(value: BsdtarOptions) -> Self
fn from(value: BsdtarOptions) -> Self
Creates an MtreeSchema
from a BsdtarOptions
Source§impl FromStr for MtreeSchema
impl FromStr for MtreeSchema
Source§fn from_str(s: &str) -> Result<MtreeSchema, Self::Err>
fn from_str(s: &str) -> Result<MtreeSchema, Self::Err>
Creates an MtreeSchema
from string slice s
.
Relies on SchemaVersion::from_str
to create a corresponding MtreeSchema
from
s
.
§Errors
Returns an error if
- no
SchemaVersion
can be created froms
, - or the conversion from
SchemaVersion
toMtreeSchema
fails.
Source§impl MetadataFile<MtreeSchema> for Mtree
impl MetadataFile<MtreeSchema> for Mtree
Source§fn from_file_with_schema(
file: impl AsRef<Path>,
schema: Option<MtreeSchema>,
) -> Result<Self, Error>
fn from_file_with_schema( file: impl AsRef<Path>, schema: Option<MtreeSchema>, ) -> Result<Self, Error>
Creates a Mtree
from file
, optionally validated using a MtreeSchema
.
Opens the file
and defers to Mtree::from_reader_with_schema
.
§Note
To automatically derive the MtreeSchema
, use Mtree::from_file
.
§Examples
use std::{fs::File, io::Write};
use alpm_common::{FileFormatSchema, MetadataFile};
use alpm_mtree::{Mtree, MtreeSchema};
use alpm_types::{SchemaVersion, semver_version::Version};
// Prepare a file with ALPM-MTREE data
let file = {
let mtree_data = r#"#mtree
/set mode=644 uid=0 gid=0 type=file
./some_file time=1700000000.0 size=1337 sha256digest=0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
./some_link type=link link=some_file time=1700000000.0
./some_dir type=dir time=1700000000.0
"#;
let mtree_file = tempfile::NamedTempFile::new()?;
let mut output = File::create(&mtree_file)?;
write!(output, "{}", mtree_data)?;
mtree_file
};
let mtree = Mtree::from_file_with_schema(
file.path().to_path_buf(),
Some(MtreeSchema::V2(SchemaVersion::new(Version::new(2, 0, 0)))),
)?;
§Errors
Returns an error if
- the
file
cannot be opened for reading, - no variant of
Mtree
can be constructed from the contents offile
, - or
schema
isSome
and theMtreeSchema
does not match the contents offile
.
Source§fn from_reader_with_schema(
reader: impl Read,
schema: Option<MtreeSchema>,
) -> Result<Self, Error>
fn from_reader_with_schema( reader: impl Read, schema: Option<MtreeSchema>, ) -> Result<Self, Error>
Creates a Mtree
from a reader
, optionally validated using a
MtreeSchema
.
Reads the reader
to string (and decompresses potentially gzip compressed data on-the-fly).
Then defers to Mtree::from_str_with_schema
.
§Note
To automatically derive the MtreeSchema
, use Mtree::from_reader
.
§Examples
use std::{fs::File, io::Write};
use alpm_common::MetadataFile;
use alpm_mtree::{Mtree, MtreeSchema};
use alpm_types::{SchemaVersion, semver_version::Version};
// Prepare a reader with ALPM-MTREE data
let reader = {
let mtree_data = r#"#mtree
/set mode=644 uid=0 gid=0 type=file
./some_file time=1700000000.0 size=1337 sha256digest=0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
./some_link type=link link=some_file time=1700000000.0
./some_dir type=dir time=1700000000.0
"#;
let mtree_file = tempfile::NamedTempFile::new()?;
let mut output = File::create(&mtree_file)?;
write!(output, "{}", mtree_data)?;
File::open(&mtree_file.path())?
};
let mtree = Mtree::from_reader_with_schema(
reader,
Some(MtreeSchema::V2(SchemaVersion::new(Version::new(2, 0, 0)))),
)?;
§Errors
Returns an error if
- the
reader
cannot be read to string, - no variant of
Mtree
can be constructed from the contents of thereader
, - or
schema
isSome
and theMtreeSchema
does not match the contents of thereader
.
Source§fn from_str_with_schema(
s: &str,
schema: Option<MtreeSchema>,
) -> Result<Self, Error>
fn from_str_with_schema( s: &str, schema: Option<MtreeSchema>, ) -> Result<Self, Error>
Creates a Mtree
from string slice, optionally validated using a
MtreeSchema
.
If schema
is None
attempts to detect the MtreeSchema
from s
.
Attempts to create a Mtree
variant that corresponds to the MtreeSchema
.
§Note
To automatically derive the MtreeSchema
, use Mtree::from_str
.
§Examples
use std::{fs::File, io::Write};
use alpm_common::MetadataFile;
use alpm_mtree::{Mtree, MtreeSchema};
use alpm_types::{SchemaVersion, semver_version::Version};
let mtree_v2 = r#"
#mtree
/set mode=644 uid=0 gid=0 type=file
./some_file time=1700000000.0 size=1337 sha256digest=0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
./some_link type=link link=some_file time=1700000000.0
./some_dir type=dir time=1700000000.0
"#;
let mtree = Mtree::from_str_with_schema(
mtree_v2,
Some(MtreeSchema::V2(SchemaVersion::new(Version::new(2, 0, 0)))),
)?;
let mtree_v1 = r#"
#mtree
/set mode=644 uid=0 gid=0 type=file
./some_file time=1700000000.0 size=1337 sha256digest=0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef md5digest=d3b07384d113edec49eaa6238ad5ff00
./some_link type=link link=some_file time=1700000000.0
./some_dir type=dir time=1700000000.0
"#;
let mtree = Mtree::from_str_with_schema(
mtree_v1,
Some(MtreeSchema::V1(SchemaVersion::new(Version::new(1, 0, 0)))),
)?;
§Errors
Returns an error if
schema
isSome
and the specified variant ofMtree
cannot be constructed froms
,schema
isNone
and- a
MtreeSchema
cannot be derived froms
, - or the detected variant of
Mtree
cannot be constructed froms
.
- a
Source§impl PartialEq for MtreeSchema
impl PartialEq for MtreeSchema
Source§impl TryFrom<SchemaVersion> for MtreeSchema
impl TryFrom<SchemaVersion> for MtreeSchema
Source§fn try_from(value: SchemaVersion) -> Result<Self, Self::Error>
fn try_from(value: SchemaVersion) -> Result<Self, Self::Error>
Converts a SchemaVersion
to an MtreeSchema
.
§Errors
Returns an error if the SchemaVersion
’s inner Version
does not provide a major
version that corresponds to an MtreeSchema
variant.
impl Eq for MtreeSchema
impl StructuralPartialEq for MtreeSchema
Auto Trait Implementations§
impl Freeze for MtreeSchema
impl RefUnwindSafe for MtreeSchema
impl Send for MtreeSchema
impl Sync for MtreeSchema
impl Unpin for MtreeSchema
impl UnwindSafe for MtreeSchema
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more