Struct rc_zip::parse::StoredEntry

source ·
pub struct StoredEntry {
    pub entry: Entry,
    pub header_offset: u64,
    pub external_attrs: u32,
    pub creator_version: Version,
    pub reader_version: Version,
    pub flags: u16,
    pub uid: Option<u32>,
    pub gid: Option<u32>,
    pub mode: Mode,
    pub extra_fields: Vec<ExtraField>,
    pub inner: StoredEntryInner,
}
Expand description

An entry as stored into an Archive. Contains additional metadata and offset information.

Whereas Entry is archive-independent, StoredEntry contains information that is tied to a specific archive.

When reading archives, one deals with a list of StoredEntry, whereas when writing one, one typically only specifies an Entry and provides the entry’s contents: fields like the CRC32 hash, uncompressed size, and compressed size are derived automatically from the input.

Fields§

§entry: Entry

Archive-independent information

This contains the entry’s name, timestamps, comment, compression method.

§header_offset: u64

Offset of the local file header in the zip file

[optional non-zip data]
[local file header 1] <------ header_offset points here
[encryption header 1]
[file data 1]
[data descriptor 1]
...
[central directory]
[optional zip64 end of central directory info]
[end of central directory record]
§external_attrs: u32

External attributes (zip)

§creator_version: Version

Version of zip supported by the tool that crated this archive.

§reader_version: Version

Version of zip needed to extract this archive.

§flags: u16

General purpose bit flag

In the zip format, the most noteworthy flag (bit 11) is for UTF-8 names. Other flags can indicate: encryption (unsupported), various compression settings (depending on the Method used).

For LZMA, general-purpose bit 1 denotes the EOS marker.

§uid: Option<u32>

Unix user ID

Only present if a Unix extra field or New Unix extra field was found.

§gid: Option<u32>

Unix group ID

Only present if a Unix extra field or New Unix extra field was found.

§mode: Mode

File mode

§extra_fields: Vec<ExtraField>

Any extra fields recognized while parsing the file.

Most of these should be normalized and accessible as other fields, but they are also made available here raw.

§inner: StoredEntryInner

These fields are cheap to clone and needed for entry readers, hence them being in a separate struct

Implementations§

source§

impl StoredEntry

source

pub fn name(&self) -> &str

Returns the entry’s name. See also sanitized_name(), which returns a sanitized version of the name.

This should be a relative path, separated by /. However, there are zip files in the wild with all sorts of evil variants, so, be conservative in what you accept.

source

pub fn sanitized_name(&self) -> Option<&str>

Returns a sanitized version of the entry’s name, if it seems safe. In particular, if this method feels like the entry name is trying to do a zip slip (cf. https://snyk.io/research/zip-slip-vulnerability), it’ll return None.

Other than that, it will strip any leading slashes on non-Windows OSes.

source

pub fn comment(&self) -> Option<&str>

The entry’s comment, if any.

When reading a zip file, an empty comment results in None.

source

pub fn method(&self) -> Method

The compression method used for this entry

source

pub fn modified(&self) -> DateTime<Utc>

This entry’s “last modified” timestamp - with caveats

Due to the history of the ZIP file format, this may be inaccurate. It may be offset by a few hours, if there is no extended timestamp information. It may have a resolution as low as two seconds, if only MSDOS timestamps are present. It may default to the Unix epoch, if something went really wrong.

If you’re reading this after the year 2038, or after the year 2108, godspeed.

source

pub fn created(&self) -> Option<&DateTime<Utc>>

This entry’s “created” timestamp, if available.

See StoredEntry::modified() for caveats.

source

pub fn accessed(&self) -> Option<&DateTime<Utc>>

This entry’s “last accessed” timestamp, if available.

See StoredEntry::modified() for caveats.

source§

impl StoredEntry

source

pub fn contents(&self) -> EntryContents

Determine EntryContents of this entry based on its mode.

Trait Implementations§

source§

impl Clone for StoredEntry

source§

fn clone(&self) -> StoredEntry

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

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> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> ToOwned for T
where T: Clone,

§

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, U> TryFrom<U> for T
where U: Into<T>,

§

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>,

§

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.
source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more