---@meta zlib

--------------------------------------------------------------------------------
-- lua-zlib C 模块
--------------------------------------------------------------------------------

---@alias zlib_flush 'none'|'sync'|'full'|'finish'
---@alias zlib_filter fun(input?:string, flush?:zlib_flush):string, boolean, integer, integer
---@alias zlib_checksum fun(input?:string|fun():integer, length?:integer):integer, integer

---@class zlib*
---@field BEST_SPEED integer 最快压缩等级
---@field BEST_COMPRESSION integer 最佳压缩等级
---@field NO_COMPRESSION? integer 无压缩等级
---@field DEFAULT_COMPRESSION? integer 默认压缩等级
---@field FILTERED? integer filtered 策略
---@field HUFFMAN_ONLY? integer huffman-only 策略
---@field RLE? integer RLE 策略
---@field FIXED? integer fixed 策略
---@field DEFAULT_STRATEGY? integer 默认策略
---@field MINIMUM_MEMLEVEL? integer 最小 memLevel
---@field MAXIMUM_MEMLEVEL? integer 最大 memLevel
---@field DEFAULT_MEMLEVEL? integer 默认 memLevel
---@field DEFAULT_WINDOWBITS? integer 默认 windowBits
---@field MINIMUM_WINDOWBITS? integer 最小 windowBits
---@field MAXIMUM_WINDOWBITS? integer 最大 windowBits
---@field GZIP_WINDOWBITS? integer gzip windowBits 偏移
---@field RAW_WINDOWBITS? integer raw windowBits 标记
---@field _COPYRIGHT string 版权信息
---@field _DESCRIPTION string 模块描述
---@field _VERSION string 模块版本
---@field _TEST_BUFSIZ integer Lua 缓冲区大小
---@type zlib*
local M = {}

--- 创建 deflate 流式压缩函数。
---@param level? integer 压缩等级
---@param windowBits? integer windowBits；负数可用于 raw deflate
---@return zlib_filter filter 压缩函数
function M.deflate(level, windowBits) end

--- 创建 inflate 流式解压函数。
---@param windowBits? integer windowBits；默认自动检测 gzip/zlib 头
---@return zlib_filter filter 解压函数
function M.inflate(windowBits) end

--- 创建 Adler-32 校验函数。
---@return zlib_checksum checksum 校验函数
function M.adler32() end

--- 创建 CRC-32 校验函数。
---@return zlib_checksum checksum 校验函数
function M.crc32() end

--- 一次性压缩字符串；启用 lzlib 兼容编译时可用。
---@param input string 输入数据
---@param level? integer 压缩等级
---@param method? integer 压缩方法
---@param windowBits? integer windowBits
---@param memLevel? integer memLevel
---@param strategy? integer 压缩策略
---@return string? output 压缩结果
---@return integer code zlib 返回码
function M.compress(input, level, method, windowBits, memLevel, strategy) end

--- 一次性解压字符串；启用 lzlib 兼容编译时可用。
---@param input string 输入数据
---@param windowBits? integer windowBits
---@return string output 解压结果
function M.decompress(input, windowBits) end

--- 返回底层 zlib 版本号组件。
---@return integer major 主版本
---@return integer minor 次版本
---@return integer patch 修订号
---@return integer? build 构建号
function M.version() end

return M
