Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local api = { LoadOrder = 100 }
- function api.Build()
- local Data = { Root = "/nekOS/data" }
- Data.__index = Data
- function Data:__call(root)
- root = root or "/"
- local inst = setmetatable({ Root = root }, self)
- return inst
- end
- function Data:require(p) return require(self.Root.."/"..p) end
- function Data:load(f)
- local data = self
- local manager = { Path = data.Root.."/"..f, Data = {}, JSON = false }
- function manager:__call()
- if not rawget(self,"exists")(self) then return false, "File not found." end
- local f = fs.open(rawget(self,"Path"), "r")
- local t = f.readAll();
- f.close()
- local data = {}
- local success,err = pcall(function() data = textutils.unserialize(t) end)
- if not success then return false,err end
- if not data then
- local success,err = pcall(function() data = json:parse(t) end)
- if not success then return false,err end
- if not data then return false,"Couldn't read file." end
- self:object(true)
- end
- rawset(self,"Data",data)
- return true
- end
- function manager:__index(k) return rawget(self,"Data")[k] or rawget(self,k) end
- function manager:__newindex(k,v) rawget(self,"Data")[k]=v end
- function manager:exists() return fs.exists(rawget(self,"Path")) end
- function manager:save(p) return data:save(p or f,rawget(self,"Data"),rawget(self,"JSON")) end
- function manager:object(b) if type(b)~="boolean" then return false,"Parameter #1 only accepts booleans." end rawset(self,"JSON",b) return true end
- manager = setmetatable(manager, manager)
- return manager,manager()
- end
- function Data:save(p,d,j)
- j=j or false
- local s,e = pcall(function() d = j and json:stringify(d) or textutils.serialize(d, { compact = true }) end)
- if not s then return false, e end
- local f = fs.open(self.Root.."/"..p, "w")
- f.write(d)
- f.close()
- return true
- end
- return setmetatable(Data, Data)
- end
- return api
Add Comment
Please, Sign In to add comment