Differences From
Artifact [2822b4a0ba]:
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