// [rfc1952](https://datatracker.ietf.org/doc/html/rfc1952) compliant
// gzip compression/decompression
module gzip
import compress.deflate
// CompressFlags
@[deprecated: 'never used']
@[deprecated_after: '2026-07-31']
@[flag]
pub enum CompressFlags {
// The low 12 bits will be overwritten by `compression_level`
compression_level_overwrite_flag01
compression_level_overwrite_flag02
compression_level_overwrite_flag03
compression_level_overwrite_flag04
compression_level_overwrite_flag05
compression_level_overwrite_flag06
compression_level_overwrite_flag07
compression_level_overwrite_flag08
compression_level_overwrite_flag09
compression_level_overwrite_flag10
compression_level_overwrite_flag11
compression_level_overwrite_flag12
write_zlib_header
compute_adler32
greedy_parsing_flag
nondeterministic_parsing_flag
rle_matches
filter_matches
force_all_static_blocks
force_all_raw_blocks
}
// CompressParams set compression_level for compression:
@[deprecated: 'never used']
@[deprecated_after: '2026-07-31']
@[params]
pub struct CompressParams {
pub:
compression_level int
flags CompressFlags
}
// compress compresses an array of bytes using gzip and returns the compressed bytes in a new array.
pub fn compress(data []u8) ![]u8 {
// Delegate to deflate.compress_gzip() which implements RFC 1952
return deflate.compress_gzip(data)
}
// DecompressFlags
// N.B.: only retained for API compatibility.
@[deprecated: 'never used']
@[deprecated_after: '2026-07-31']
@[flag]
pub enum DecompressFlags {
parse_zlib_header
has_more_input
using_non_wrapping_output_buf
compute_adler32
}
// DecompressParams controls gzip decompression behavior.
// N.B.: only retained for API compatibility.
@[deprecated: 'never used']
@[deprecated_after: '2026-07-31']
@[params]
pub struct DecompressParams {
pub:
verify_header_checksum bool = true
verify_length bool = true
verify_checksum bool = true
flags DecompressFlags
}
// validate validates the gzip header of data and returns its parsed details if valid.
// N.B.: only retained for API compatibility, all validation is now performed by the deflate backend.
// The returned header details are not used by the decompressor.
// TODO: remove after the deprecation period.
@[deprecated: 'never used']
@[deprecated_after: '2026-07-31']
pub fn validate(data []u8, _ DecompressParams) !deflate.GzipHeader {
return deflate.validate_gzip_header(data)!
}
// decompress decompresses a gzip stream and returns the decompressed bytes in a new array.
pub fn decompress(data []u8) ![]u8 {
return deflate.decompress_gzip(data)
}
// decompress_with_callback decompresses a gzip stream (RFC 1952) using a callback for chunked delivery.
// The callback receives chunks of decompressed data and should return the chunk length to continue, or 0 to abort.
// Returns the total decompressed length.
pub fn decompress_with_callback(data []u8, cb deflate.ChunkCallback, userdata voidptr) !int {
deflate.validate_gzip_header(data)!
return deflate.decompress_with_callback(data, cb, userdata)
}