starlit  Diff

Differences From Artifact [2822b4a0ba]:

To Artifact [979397aff5]:


   195    195   	-- }
   196    196   	local def, name
   197    197   	if select('#', ...) >= 2 then
   198    198   		name, def = ...
   199    199   	else
   200    200   		def = ...
   201    201   	end
   202         -	name = 'struct' .. (name and ':' .. name or '');
          202  +	name = 'struct' .. (name and (':' .. name) or '');
   203    203   	report('defining struct name=%q fields=%s', name, dump(def))
   204    204   	return {
   205    205   		name = name;
   206    206   		enc = function(obj)
   207    207   		report('encoding struct name=%q vals=%s', name, dump(obj))
   208    208   			local enc = m.streamEncoder()
   209    209   			local n = 0
   210    210   			for k,ty in pairs(def) do n=n+1
   211         -				if obj[k] == nil then error('missing key '..dump(k)..' for type '..ty.name) end
          211  +				if obj[k] == nil then
          212  +					error(string.format("missing %s field %q for %s", ty.name, k, name))
          213  +				end
   212    214   				local encoded = ty.enc(obj[k])
   213    215   				enc.push(T.u8.enc(#k), size.enc(#encoded), k, encoded)
   214    216   			end
   215    217   			return size.enc(n) .. enc.peek()
   216    218   		end;
   217    219   		dec = debugger.wrap(function(blob)
   218    220   			if blob == '' then