 /// A strucutre which provides information about gzip archive.
 public struct GzipHeader {
 
+    struct Flags {
+        static let ftext: UInt8 = 0x01
+        static let fhcrc: UInt8 = 0x02
+        static let fextra: UInt8 = 0x04
+        static let fname: UInt8 = 0x08
+        static let fcomment: UInt8 = 0x10
+    }
+
     /// Supported compression methods in gzip archive.
     public enum CompressionMethod: Int {
         case deflate = 8

        }

        // Some archives may contain source file name (this part ends with zero byte)
        if serviceInfo.flags & Flags.fname != 0 {
            var fnameBytes: [UInt8] = []
            while true {
                let byte = pointerData.alignedByte()

        - Throws: `GzipError`. It may indicate that either the data is damaged or
        it might not be compressed with gzip at all.
    */

    public init(archiveData: Data) throws {
        let pointerData = DataWithPointer(data: archiveData, bitOrder: .reversed)
        try self.init(pointerData)
    }

    init(_ pointerData: DataWithPointer) throws {
        // First two bytes should be correct 'magic' bytes
        let magic = pointerData.intFromAlignedBytes(count: 2)
        guard magic == 0x8b1f else { throw GzipError.WrongMagic }
