Reticulum-Go/bindings/lua/rns/errors.lua

71 lines
1.2 KiB
Lua

-- SPDX-License-Identifier: Apache-2.0
-- Copyright (c) 2024-2026 Quad4.io
local ffi_mod = require("rns.ffi")
local lib = ffi_mod.lib
local ffi = ffi_mod.ffi
local Error = {
OK = 0,
INVALID_ARG = 1,
INVALID_HANDLE = 2,
NOT_FOUND = 3,
STATE = 4,
IO = 5,
INTERNAL = 6,
TIMEOUT = 7,
TRUNCATED = 8,
}
local names = {
[0] = "ok",
[1] = "invalid argument",
[2] = "invalid handle",
[3] = "not found",
[4] = "invalid state",
[5] = "io error",
[6] = "internal error",
[7] = "timeout",
[8] = "truncated",
}
local function name(code)
return names[code] or "internal error"
end
local function raise(code, message)
error({ code = code, message = message or name(code) }, 2)
end
local function map_code(code)
if code ~= Error.OK then
raise(code)
end
end
local function version()
local raw = lib.rns_version()
if raw == nil then
return ""
end
return ffi.string(raw)
end
local function last_error()
local buf = ffi.new("char[512]")
local written = ffi.new("size_t[1]", 0)
local code = lib.rns_last_error(buf, 512, written)
if code ~= Error.OK or written[0] == 0 then
return ""
end
return ffi.string(buf, written[0])
end
return {
Error = Error,
name = name,
raise = raise,
map_code = map_code,
version = version,
last_error = last_error,
}