2430eacc创建于 2024年11月20日历史提交
/*
 * Copyright (c) Huawei Technologies Co., Ltd. 2022-2024. All rights reserved.
 */
package zip4cj.model

public enum HeaderSignature <: Equatable<HeaderSignature> {
    | LOCAL_FILE_HEADER
    | EXTRA_DATA_RECORD
    | CENTRAL_DIRECTORY
    | END_OF_CENTRAL_DIRECTORY
    | TEMPORARY_SPANNING_MARKER
    | DIGITAL_SIGNATURE
    | ARCEXTDATREC
    | SPLIT_ZIP
    | ZIP64_END_CENTRAL_DIRECTORY_LOCATOR
    | ZIP64_END_CENTRAL_DIRECTORY_RECORD
    | ZIP64_EXTRA_FIELD_SIGNATURE
    | AES_EXTRA_DATA_RECORD

    public operator func !=(that: HeaderSignature): Bool {
        return !(this == that)
    }

    public operator func ==(that: HeaderSignature): Bool {
        return match ((this, that)) {
            case (LOCAL_FILE_HEADER, LOCAL_FILE_HEADER) => true
            case (EXTRA_DATA_RECORD, EXTRA_DATA_RECORD) => true
            case (CENTRAL_DIRECTORY, CENTRAL_DIRECTORY) => true
            case (END_OF_CENTRAL_DIRECTORY, END_OF_CENTRAL_DIRECTORY) => true
            case (TEMPORARY_SPANNING_MARKER, TEMPORARY_SPANNING_MARKER) => true
            case (DIGITAL_SIGNATURE, DIGITAL_SIGNATURE) => true
            case (ARCEXTDATREC, ARCEXTDATREC) => true
            case (SPLIT_ZIP, SPLIT_ZIP) => true
            case (ZIP64_END_CENTRAL_DIRECTORY_LOCATOR, ZIP64_END_CENTRAL_DIRECTORY_LOCATOR) => true
            case (ZIP64_END_CENTRAL_DIRECTORY_RECORD, ZIP64_END_CENTRAL_DIRECTORY_RECORD) => true
            case (ZIP64_EXTRA_FIELD_SIGNATURE, ZIP64_EXTRA_FIELD_SIGNATURE) => true
            case (AES_EXTRA_DATA_RECORD, AES_EXTRA_DATA_RECORD) => true
            case _ => false
        }
    }

    public static func values(): Array<HeaderSignature> {
        [
            LOCAL_FILE_HEADER,
            EXTRA_DATA_RECORD,
            CENTRAL_DIRECTORY,
            END_OF_CENTRAL_DIRECTORY,
            TEMPORARY_SPANNING_MARKER,
            DIGITAL_SIGNATURE,
            ARCEXTDATREC,
            SPLIT_ZIP,
            ZIP64_END_CENTRAL_DIRECTORY_LOCATOR,
            ZIP64_END_CENTRAL_DIRECTORY_RECORD,
            ZIP64_EXTRA_FIELD_SIGNATURE,
            AES_EXTRA_DATA_RECORD
        ]
    }

    public func getValue(): Int64 {
        return match (this) {
            case LOCAL_FILE_HEADER => 0x04034b50
            case EXTRA_DATA_RECORD => 0x08074b50
            case CENTRAL_DIRECTORY => 0x02014b50
            case END_OF_CENTRAL_DIRECTORY => 0x06054b50
            case TEMPORARY_SPANNING_MARKER => 0x30304b50
            case DIGITAL_SIGNATURE => 0x05054b50
            case ARCEXTDATREC => 0x08064b50
            case SPLIT_ZIP => 0x08074b50
            case ZIP64_END_CENTRAL_DIRECTORY_LOCATOR => 0x07064b50
            case ZIP64_END_CENTRAL_DIRECTORY_RECORD => 0x06064b50
            case ZIP64_EXTRA_FIELD_SIGNATURE => 0x0001
            case _ => 0x9901
        }
    }
}