-- ldb3
-- tiny file DB stored in /data//
local ROOT = "/data"
if not fs.exists(ROOT) then
fs.makeDir(ROOT)
end
local function dbPath(db)
return ROOT .. "/" .. db
end
local function recPath(db, key)
return dbPath(db) .. "/" .. key
end
local function ensure(db)
local p = dbPath(db)
if not fs.exists(p) then
fs.makeDir(p)
end
end
function set(db, key, value)
ensure(db)
local h = fs.open(recPath(db, key), "w")
h.write(textutils.serialize(value))
h.close()
end
function get(db, key, default)
local p = recPath(db, key)
if not fs.exists(p) then
return default
end
local h = fs.open(p, "r")
local raw = h.readAll()
h.close()
local ok, val = pcall(textutils.unserialize, raw)
if ok then
return val
else
return default
end
end
function list(db)
local p = dbPath(db)
if not fs.exists(p) then return {} end
return fs.list(p)
end
function del(db, key)
local p = recPath(db, key)
if fs.exists(p) then fs.delete(p) end
end
function clear(db)
for _, name in ipairs(list(db)) do
del(db, name)
end
end