compress.deflate #
Description
compress.deflate is a pure V RFC-compliant DEFLATE module.
Compression output format is selected by CompressFormat via compress(data, format: ...):
.zlib(RFC 1950 wrapper).gzip(RFC 1952 wrapper).raw_deflate(RFC 1951 raw stream)
compress keeps default zlib behavior, and decompress auto-detects all three.
Interop Validation
Cross-validation with C/zlib is kept separate from v test and can be run manually:
./vnew run vlib/compress/deflate/interop/deflate_interop.v
Example
import compress.deflate
fn main() {
uncompressed := 'Hello world!'
zlib_stream := deflate.compress(uncompressed.bytes())!
gzip_stream := deflate.compress(uncompressed.bytes(), format: .gzip)!
raw_stream := deflate.compress(uncompressed.bytes(), format: .raw_deflate)!
assert deflate.decompress(zlib_stream)! == uncompressed.bytes()
assert deflate.decompress(gzip_stream)! == uncompressed.bytes()
decompressed := deflate.decompress(raw_stream)!
assert decompressed == uncompressed.bytes()
}
fn compress #
fn compress(data []u8, format CompressParams) ![]u8
compress compresses data as zlib, gzip, or raw DEFLATE.
fn compress_gzip #
fn compress_gzip(data []u8) ![]u8
compress_gzip compresses data into a gzip stream (RFC 1952).
fn compress_raw #
fn compress_raw(data []u8) ![]u8
compress_raw compresses data to a raw RFC 1951 DEFLATE stream.
fn compress_zlib #
fn compress_zlib(data []u8) ![]u8
fn decompress #
fn decompress(data []u8) ![]u8
decompress decompresses a zlib (RFC 1950), gzip (RFC 1952), or raw DEFLATE (RFC 1951) stream. The format is auto-detected.
fn decompress_gzip #
fn decompress_gzip(data []u8) ![]u8
decompress_gzip decompresses a gzip stream (RFC 1952). It returns the decompressed bytes in a new array.
fn decompress_raw_with_consumed #
fn decompress_raw_with_consumed(data []u8) !RawInflateResult
decompress_raw_with_consumed decompresses raw RFC 1951 DEFLATE data and tracks consumed bytes.
fn decompress_with_callback #
fn decompress_with_callback(data []u8, cb ChunkCallback, userdata voidptr) !int
decompress_with_callback decompresses a zlib/gzip/raw stream (RFC 1950, 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.
fn decompress_zlib #
fn decompress_zlib(data []u8) ![]u8
decompress_zlib decompresses a zlib stream (RFC 1950). It returns the decompressed bytes in a new array.
fn validate_gzip_header #
fn validate_gzip_header(data []u8) !GzipHeader
validate_gzip_header validates a RFC 1952 gzip header and returns parsed fields.
fn validate_zlib_header #
fn validate_zlib_header(data []u8) !ZlibHeader
validate_zlib_header validates a RFC 1950 zlib header.
fn CompressFormat.from #
fn CompressFormat.from[W](input W) !CompressFormat
type ChunkCallback #
type ChunkCallback = fn (chunk []u8, userdata voidptr) int
enum CompressFormat #
enum CompressFormat {
zlib
gzip
raw_deflate
}
CompressFormat selects the output container around the RFC 1951 payload.
struct CompressParams #
struct CompressParams {
pub:
format CompressFormat = .zlib
}
struct GzipHeader #
struct GzipHeader {
pub mut:
flags u8
payload_start int
extra []u8
filename []u8
comment []u8
modification_time u32
operating_system u8
}
struct RawInflateResult #
struct RawInflateResult {
pub:
decoded []u8
consumed int
}
struct ZlibHeader #
struct ZlibHeader {
pub:
payload_start int = 2
}
- README
- fn compress
- fn compress_gzip
- fn compress_raw
- fn compress_zlib
- fn decompress
- fn decompress_gzip
- fn decompress_raw_with_consumed
- fn decompress_with_callback
- fn decompress_zlib
- fn validate_gzip_header
- fn validate_zlib_header
- fn CompressFormat.from
- type ChunkCallback
- enum CompressFormat
- struct CompressParams
- struct GzipHeader
- struct RawInflateResult
- struct ZlibHeader