You can not comment out the line, because then bitser will effectively stop writing out stuff. Instead you need to modify the "types" table on line 246, which defines the serializer function to use for each data type, so something like this:
MrFariator wrote: ↑Mon Apr 25, 2022 7:11 pm
You can not comment out the line, because then bitser will effectively stop writing out stuff. Instead you need to modify the "types" table on line 246, which defines the serializer function to use for each data type, so something like this:
local types = {
number = write_number,
string = write_string,
table = write_table,
boolean = write_boolean,
["nil"] = write_nil,
cdata = write_cdata,
userdata = write_nil -- use write_nil, or create your custom serializer
}
This works, but when I try to deserialize the data, an error appears:
Error
bitser.lua:324: table index is nil
Traceback
[love "callbacks.lua"]:228: in function 'handler'
bitser.lua:324: in function 'deserialize_value'
bitser.lua:324: in function 'loads'
main.lua:50: in function 'draw'
[love "callbacks.lua"]:168: in function <[love "callbacks.lua"]:144>
[C]: in function 'xpcall'
Not sure if this question is still open, but with love11.4 luajit was updated to include `string.buffer` library. So you can now use that to serialize lua tables. If you're using Ubuntu, some program managers don't install the correct version of luajit with love11.4 so they don't have `string.buffer`. So you can get around this by using the app image from the official site
local buffer = require("string.buffer")
local tbl= {
"hello",
value = "world"
}
print(tbl[0], tbl.value) -- hello world
local str = buffer.encode(tbl)
local decodedTbl = buffer.decode(str)
print(decodedTbl[0], decodedTbl.value) -- hello world
print(love.data.encode("base64", "string", str)) -- you can just print the encoded string, but it can have new line values as it is binary data so I prefer to encode it
If you know what values are going to be in your lua table, you can optimize it (just note that these string keys must always be in the same order for encoding or decoding otherwise it won't know what key to use in the correct place)
local buffer = require("string.buffer")
local options = {
dict = { "commonly", "used", "string", "keys" },
}
local buf_enc = buffer.new(options)
local buf_dec = buffer.new(options)
local function encode(obj)
return buf_enc:reset():encode(obj):get()
end
local function decode(str)
return buf_dec:set(str):decode()
end