On Mon, Oct 03, 2011 at 08:43:54AM -0500, Anthony Liguori wrote: > >>visit_start_array(v, "entries", errp); > >>for (int i = 0; i< s->size; i++) { > >> visit_type_int(v, NULL,&s->entry[i], errp); > >>} > >>visit_end_array(v, errp); > > > >Sequences can encode structures not just arrays. > >How would you encode this for example: > > > >SEQUENCE OF { VQN: INTEGER, SEQUENCE { OPTIONAL VECTOR: INTEGER} } > > visit_start_array(v, "vqs", errp); > for (i = 0; i < s->n_vqs; i++) { > // Array elements never have a name, hence NULL name > visit_start_struct(v, "VirtQueue", NULL, errp); > visit_type_int(v, &s->vq[i].num, "vqn", errp); > > // Given this sub-struct an arbitrary name. It could also be anonymous. > visit_start_struct(v, "MsixInfo", "msix_info", errp); > if (s->vq[i].msix_enabled) { > visit_type_int(v, &s->vq[i].vector, "vector", errp);
Why is this a pointer to vector, btw? > } > visit_end_struct(v, errp); > > visit_end_struct(v, errp); > } > visit_end_array(v, errp); > > This would also generate JSON of: > > 'vqs': [ { 'vqn': 2, 'msix_info': { 'vector': 3 } } ] How would optional fields be handled? Specifically the case where first field in a sequence tells you the meaning of the following ones? -- MST