Skip to content
Topaz6.0 · Before release
Download

Search documentation

Specification 6.0 · Not released · Tested product 5.21.3

Use arrow keys to choose a result. Press Enter to open.

Type an API name, diagnostic number, rule, or project topic.

    Library · std.bytes

    Bytes.gzipCompress

    Compresses this byte sequence in gzip format.

    gzipCompress() -> Result<Bytes, string>
    Module
    std.bytes
    Receiver
    Bytes
    Minimum arity
    0
    Maximum arity
    0

    Declaration and parameters

    Link

    Availability

    Included by default: Pending

    Import std.bytes in language mode 5.21.

    The current compiler selects std/bytes.tpz for this language mode. Availability in other released editions and inclusion in each installed distribution are Pending.

    Source evidence

    Receiver

    Bytes

    Parameter constraints

    Bytes.gzipCompress returns Ok with one RFC 1952 gzip member containing the receiver bytes. Empty input is valid.

    The compressor does not read a clock or derive a filename from its environment. The header timestamp is zero and optional name and comment fields are absent.

    Bytes.gzipDecompress accepts one member with compression method DEFLATE, including valid timestamp, operating system, extra field, name, comment, and header CRC fields.

    The decoder accepts stored, fixed Huffman, and dynamic Huffman DEFLATE blocks. It validates the member CRC-32 and uncompressed size modulo 4294967296.

    Reserved header flags, malformed optional fields, invalid compressed data, checksum mismatches, and truncation return Err with a string.

    A second member or other bytes after the member return Err. A Bytes value represents one complete compressed payload in this API.

    Decoding a successfully compressed value recovers the original bytes. A decoder failure never exposes a prefix of the output.

    The receiver evaluates once and remains unchanged. Compression and decompression perform no I/O and do not decode the payload as text.

    Result

    The declared result type is Result<Bytes, string>.

    Effects

    Failures

    Result and effects

    Link

    Return one gzip member in Ok with a zero timestamp and no ambient filename or comment.

    Resolved contracts

    Link

    Related entries

    Link

    std.bytes

    Read and write complete gzip members

    Link
    Ruletopaz.stdlib.contract.bytes-gzip.rule

    Read and write complete gzip members

    Bytes.gzipCompress returns Ok with one RFC 1952 gzip member containing the receiver bytes. Empty input is valid.

    The compressor does not read a clock or derive a filename from its environment. The header timestamp is zero and optional name and comment fields are absent.

    Bytes.gzipDecompress accepts one member with compression method DEFLATE, including valid timestamp, operating system, extra field, name, comment, and header CRC fields.

    The decoder accepts stored, fixed Huffman, and dynamic Huffman DEFLATE blocks. It validates the member CRC-32 and uncompressed size modulo 4294967296.

    Reserved header flags, malformed optional fields, invalid compressed data, checksum mismatches, and truncation return Err with a string.

    A second member or other bytes after the member return Err. A Bytes value represents one complete compressed payload in this API.

    Decoding a successfully compressed value recovers the original bytes. A decoder failure never exposes a prefix of the output.

    The receiver evaluates once and remains unchanged. Compression and decompression perform no I/O and do not decode the payload as text.

    Why

    Standard header and block handling allows gzip data to move between programs. Requiring one complete member prevents unconsumed suffixes from being silently discarded.

    Source evidence

    Recover empty and nonempty payloads

    Link
    main.tpzRecover empty and nonempty payloadsOpen in Playground
    1. import std.io
    2. import std.test
    3. for text in (["", "hello"]) {
    4. let encoded = test.assertOk(text.encodeUtf8().gzipCompress())
    5. io.writeLine(test.assertOk(encoded.gzipDecompress()).toHex())
    6. }
    Expected outputexit 0
    
    68656c6c6f
    
    $ topaz run main.tpz · target product 5.21.3
    Expected result

    Expected result

    Execution completes. Exit code 0.

    Expected stdout
    1. 68656c6c6f
    Source evidence

    Accept ordinary gzip header metadata

    Link
    main.tpzAccept ordinary gzip header metadataOpen in Playground
    1. import std.bytes { Bytes }
    2. import std.io
    3. import std.test
    4. let encoded = test.assertOk(Bytes.fromHex("1f8b0800010000000003010500faff68656c6c6f86a6103605000000"))
    5. match (encoded.gzipDecompress()) {
    6. case Ok(bytes) => io.writeLine(bytes.toHex())
    7. case Err(_) => io.writeLine("rejected")
    8. }
    Expected outputexit 0
    68656c6c6f
    
    $ topaz run main.tpz · target product 5.21.3
    Expected result

    Expected result

    Execution completes. Exit code 0.

    Expected stdout
    1. 68656c6c6f
    Source evidence

    Accept compressed gzip blocks

    Link
    main.tpzAccept compressed gzip blocksOpen in Playground
    1. import std.bytes { Bytes }
    2. import std.io
    3. import std.test
    4. let encoded = test.assertOk(Bytes.fromHex("1f8b08000000000000ffcb48cdc9c9070086a6103605000000"))
    5. match (encoded.gzipDecompress()) {
    6. case Ok(bytes) => io.writeLine(bytes.toHex())
    7. case Err(_) => io.writeLine("rejected")
    8. }
    Expected outputexit 0
    68656c6c6f
    
    $ topaz run main.tpz · target product 5.21.3
    Expected result

    Expected result

    Execution completes. Exit code 0.

    Expected stdout
    1. 68656c6c6f
    Source evidence

    Reject a truncated member and an invalid checksum

    Link
    main.tpzReject a truncated member and an invalid checksumOpen in Playground
    1. import std.bytes { Bytes }
    2. import std.io
    3. import std.test
    4. for hex in (["1f8b0800", "1f8b08000000000000ff010500faff68656c6c6f87a6103605000000"]) {
    5. match (test.assertOk(Bytes.fromHex(hex)).gzipDecompress()) {
    6. case Err(_) => io.writeLine("invalid gzip")
    7. case Ok(_) => io.writeLine("accepted")
    8. }
    9. }
    Expected outputexit 0
    invalid gzip
    invalid gzip
    
    $ topaz run main.tpz · target product 5.21.3
    Expected result

    Expected result

    Execution completes. Exit code 0.

    Expected stdout
    1. invalid gzip
    2. invalid gzip
    Source evidence

    Menu

    Download