You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.5 KiB
43 lines
1.5 KiB
--[[
|
|
Written in 2019 by Allen Faure (emptyrivers) afaure6@gmail.com
|
|
|
|
To the extent possible under law, the author(s) have dedicated all copyright and related and neighboring rights to this software to the public domain worldwide.
|
|
This software is distributed without any warranty.
|
|
You should have received a copy of the CC0 Public Domain Dedication along with this software.
|
|
If not, see http://creativecommons.org/publicdomain/zero/1.0/.
|
|
]]
|
|
|
|
local Archivist = select(2, ...).Archivist
|
|
|
|
--[[
|
|
ReadOnly store type. This is a modification of the RawData type
|
|
so that it is impossible to *edit* a store once Created.
|
|
Close and Commit both return nil, so the only data that
|
|
will ever be archived is what is passed into Create.
|
|
This is primarily useful as a perf optimization in superstores,
|
|
where you might have large-ish data chunks which will never be updated.
|
|
Note that it is an error to Create a ReadOnly store without passing any additional data in.
|
|
This is because Archivist can't serialize a nil value.
|
|
And besides, it wouldn't be very useful to archive a nil value
|
|
that you couldn't ever update.
|
|
]]
|
|
|
|
local prototype = {
|
|
id = "ReadOnly",
|
|
version = 1,
|
|
Create = function(self, data)
|
|
Archivist:Assert(data ~= nil, "A ReadOnly store cannot be created with initial value of nil.")
|
|
return data, data
|
|
end,
|
|
Open = function(self, data)
|
|
return data
|
|
end,
|
|
Commit = function(self)
|
|
return nil
|
|
end,
|
|
Close = function(self)
|
|
return nil
|
|
end,
|
|
}
|
|
|
|
Archivist:RegisterStoreType(prototype)
|
|
|