
---@class socket_ftp_request*
---@field host? string 主机名。
---@field port? integer 端口。
---@field user? string 用户名。
---@field password? string 密码。
---@field path? string 路径。
---@field type? string 传输类型。
---@field command? string 命令。
---@field argument? string 命令参数。
---@field source? ltn12_source 上传 source。
---@field sink? ltn12_sink 下载 sink。
---@field create? function socket 创建函数。

---@class socket_ftp_connection*
local socket_ftp_connection = {}

---@class socket_ftp*
---@field TIMEOUT number 默认超时。
---@field USER string 默认用户名。
---@field PASSWORD string 默认密码。
---@field genericform table 通用请求字段。
---@type socket_ftp*
local M = {}

M.TIMEOUT = 60
M.USER = nil
M.PASSWORD = nil
M.genericform = nil

--- 打开 FTP 连接。
---@param server string 服务器。
---@param port? integer 端口。
---@param create? function socket 创建函数。
---@return socket_ftp_connection*? connection 连接对象。
---@return string? errMsg 错误信息。
function M.open(server, port, create) end

--- 执行 FTP 命令。
---@param request socket_ftp_request* 请求表。
---@return any result 结果。
function M.command(request) end

--- 下载 FTP 内容。
---@param request string|socket_ftp_request* URL 或请求表。
---@return string|integer|nil bodyOrOk 响应体或状态。
---@return string? errMsg 错误信息。
function M.get(request) end

--- 上传 FTP 内容。
---@param request string|socket_ftp_request* URL 或请求表。
---@param body? string 请求体。
---@return string|integer|nil result 结果。
---@return string? errMsg 错误信息。
function M.put(request, body) end

--- LuaSocket try 函数。
---@param ... any 值。
---@return any ... 非错误返回值。
function M.try(...) end

return M
