zip-core 0.0.4

zip implementation independent structs and helpers
Documentation
use crate::{
    partial::PartialRecord,
    raw::{
        ArchiveExtraDataRecordFixed, CentralDirectoryHeaderFixed, DataDescriptor, DataDescriptorSignature,
        DataDescriptorZip64Signature, DigitalSignatureFixed, EndOfCentralDirectoryFixed, LocalFileHeaderFixed,
        Zip64EndOfCentralDirectoryFixed, Zip64EndOfCentralDirectoryLocator,
    },
};

/// implemented for all types containing a signature
pub trait Signature {
    fn is_valid_signature(&self) -> bool;
}

impl<T> Signature for T
where
    T: PartialRecord,
    T::Partial: Signature,
{
    fn is_valid_signature(&self) -> bool { self.get_partial().is_valid_signature() }
}

impl Signature for LocalFileHeaderFixed {
    fn is_valid_signature(&self) -> bool { self.local_file_header_signature == Self::LOCAL_FILE_HEADER_SIGNATURE }
}

impl Signature for DataDescriptorSignature {
    fn is_valid_signature(&self) -> bool { self.signature == DataDescriptor::SIGNATURE }
}

impl Signature for DataDescriptorZip64Signature {
    fn is_valid_signature(&self) -> bool { self.signature == DataDescriptor::SIGNATURE }
}

impl Signature for ArchiveExtraDataRecordFixed {
    fn is_valid_signature(&self) -> bool { self.archive_extra_data_signature == Self::ARCHIVE_EXTRA_DATE_SIGNATURE }
}

impl Signature for CentralDirectoryHeaderFixed {
    fn is_valid_signature(&self) -> bool { self.central_file_header_signature == Self::CENTRAL_FILE_HEADER_SIGNATURE }
}

impl Signature for DigitalSignatureFixed {
    fn is_valid_signature(&self) -> bool { self.header_signature == Self::HEADER_SIGNATURE }
}

impl Signature for Zip64EndOfCentralDirectoryFixed {
    fn is_valid_signature(&self) -> bool {
        self.zip64_end_of_central_dir_signature == Self::ZIP64_END_OF_CENTRAL_DIR_SIGNATURE
    }
}

impl Signature for Zip64EndOfCentralDirectoryLocator {
    fn is_valid_signature(&self) -> bool {
        self.zip64_end_of_central_dir_locator_signature == Self::ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIGNATURE
    }
}

impl Signature for EndOfCentralDirectoryFixed {
    fn is_valid_signature(&self) -> bool { self.end_of_central_dir_signature == Self::END_OF_CENTRAL_DIR_SIGNATURE }
}