---@meta cjson

--------------------------------------------------------------------------------
-- lua-cjson C 模块
--------------------------------------------------------------------------------

---@alias cjson_bool_option boolean|'on'|'off'
---@alias cjson_invalid_number_option boolean|'on'|'off'|'null'

---@class cjson*
---@field null lightuserdata JSON null 哨兵值
---@field empty_array lightuserdata 空数组哨兵值
---@field array_mt table 数组 metatable
---@field empty_array_mt table 空数组 metatable
---@field _NAME string 模块名
---@field _VERSION string 版本
---@type cjson*
local M = {}

--- 创建独立配置的新 cjson 模块表。
---@return cjson* module 新模块表
function M.new() end

--- 编码 Lua 值为 JSON。
---@param value any Lua 值
---@return string json JSON 文本
function M.encode(value) end

--- 解码 JSON 文本。
---@param json string JSON 文本
---@return any value Lua 值
function M.decode(json) end

--- 配置空 table 是否编码为对象。
---@param value? cjson_bool_option 选项
---@return boolean enabled 当前值
function M.encode_empty_table_as_object(value) end

--- 配置解码数组是否附带 `array_mt`。
---@param value? cjson_bool_option 选项
---@return boolean enabled 当前值
function M.decode_array_with_array_mt(value) end

--- 配置解码器是否允许注释。
---@param value? cjson_bool_option 选项
---@return boolean enabled 当前值
function M.decode_allow_comment(value) end

--- 配置稀疏数组编码策略。
---@param convert? cjson_bool_option 是否将极稀疏数组转为对象
---@param ratio? integer 稀疏比例阈值
---@param safe? integer 安全数组最大下标
---@return boolean convert 当前 convert 值
---@return integer ratio 当前 ratio 值
---@return integer safe 当前 safe 值
function M.encode_sparse_array(convert, ratio, safe) end

--- 配置编码最大嵌套深度。
---@param depth? integer 深度
---@return integer depth 当前深度
function M.encode_max_depth(depth) end

--- 配置解码最大嵌套深度。
---@param depth? integer 深度
---@return integer depth 当前深度
function M.decode_max_depth(depth) end

--- 配置数字编码精度。
---@param precision? integer 精度，1 到 16
---@return integer precision 当前精度
function M.encode_number_precision(precision) end

--- 配置是否保留编码缓冲区。
---@param value? cjson_bool_option 选项
---@return boolean enabled 当前值
function M.encode_keep_buffer(value) end

--- 配置编码 NaN/Infinity 等非法数字的方式。
---@param value? cjson_invalid_number_option 选项
---@return boolean|string value 当前值
function M.encode_invalid_numbers(value) end

--- 配置解码器是否接受 NaN/Infinity 等非法数字。
---@param value? cjson_bool_option 选项
---@return boolean enabled 当前值
function M.decode_invalid_numbers(value) end

--- 配置是否转义正斜杠。
---@param value? cjson_bool_option 选项
---@return boolean enabled 当前值
function M.encode_escape_forward_slash(value) end

--- 配置编码时是否跳过不支持的值类型。
---@param value? cjson_bool_option 选项
---@return boolean enabled 当前值
function M.encode_skip_unsupported_value_types(value) end

--- 配置格式化缩进字符串。
---@param indent? string 缩进字符串；空字符串表示不缩进
---@return string indent 当前缩进字符串
function M.encode_indent(indent) end

return M
