mirror of
https://github.com/Quad4-Software/Reticulum-Go
synced 2026-08-29 23:48:44 -04:00
72 lines
1.2 KiB
Lua
72 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,
|
||
|
|
}
|