type Sample struct {
K uint32 `msg:"k,omitempty"`
V uint32 `msg:"v,omitempty"`
}
type Samples []Sample
and now we construct a set of test cases:
s := Samples{
{1, 1},
{0, 0},
{3, 3},
}
and the generated code is:
for za0001 := range z {
// check for omitted fields
zb0001Len := uint32(2)
var zb0001Mask uint8 /* 2 bits */
_ = zb0001Mask
if z[za0001].K == 0 {
zb0001Len--
zb0001Mask |= 0x1
}
if z[za0001].V == 0 {
zb0001Len--
zb0001Mask |= 0x2
}
// variable map header, size zb0001Len
o = append(o, 0x80|uint8(zb0001Len))
if zb0001Len == 0 {
return // <---- !!! When looping to the second element, wrong data will be generated due to return. Continue may be used here.
}
...... ignore
look at this sample below:
and now we construct a set of test cases:
and the generated code is: