dofile'test/common.lua'
local m = dofile'lib/marshal.lua'
local s = dofile'lib/str.lua'
local ench_t = m.g.struct {
	id = m.t.str;
	slot = m.t.u8;
	boost = m.t.u8;
	reliability = m.t.u8;
}
local pack, unpack = m.transcoder {
	spells = m.g.array(8, ench_t);
	energy = m.t.u16;
}

local packed = pack{
	energy = 1550;
	spells = {
		{ slot = 0; boost = 15; reliability = 100; id = 'dowse' };
		{ slot = 1; boost = 3; reliability = 0; id = 'e' };
	};
}

print('\x1b[1munarmored\x1b[m\n' .. hexdump(packed))
print('\x1b[1marmored\x1b[m\n' .. hexdump(s.meta_armor(packed)))
print('\x1b[1marmored (struct mode)\x1b[m\n' .. hexdump(s.meta_armor(packed,true)))
print('\x1b[1mdearmored\x1b[m\n' .. hexdump(s.meta_dearmor(s.meta_armor(packed))))
print('\x1b[1mdearmored (struct mode)\x1b[m\n' .. hexdump(s.meta_dearmor(s.meta_armor(packed,true),true)))

test('dearmor(armor(x)) == x',s.meta_dearmor(s.meta_armor(packed)) == packed)
test('struct_dearmor(struct_armor(x)) == x',s.meta_dearmor(s.meta_armor(packed,true),true) == packed)
test('struct_dearmor("string") == "string"',s.meta_dearmor('string',true) == 'string')
report()
