Append src to data after normalizing for "multiple" field encoding. AMQP composite field definitions can be declared "multiple", see: - http://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-types-v1.0-os.html#doc-idp115568 - http://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-types-v1.0-os.html#section-composite-type-representation Multiple fields allow redundant encoding of two
| 527 | single value. |
| 528 | */ |
| 529 | static int pni_normalize_multiple(pn_data_t *data, pn_data_t *src) { |
| 530 | int err = 0; |
| 531 | pn_handle_t point = pn_data_point(src); |
| 532 | pn_data_rewind(src); |
| 533 | pn_data_next(src); |
| 534 | if (pn_data_type(src) == PN_ARRAY) { |
| 535 | switch (pn_data_get_array(src)) { |
| 536 | case 0: /* Empty array => null */ |
| 537 | err = pn_data_put_null(data); |
| 538 | break; |
| 539 | case 1: /* Single-element array => encode the element */ |
| 540 | pn_data_enter(src); |
| 541 | pn_data_narrow(src); |
| 542 | err = pn_data_appendn(data, src, 1); |
| 543 | pn_data_widen(src); |
| 544 | break; |
| 545 | default: /* Multi-element array, encode unchanged */ |
| 546 | err = pn_data_appendn(data, src, 1); |
| 547 | break; |
| 548 | } |
| 549 | } else { |
| 550 | err = pn_data_appendn(data, src, 1); /* Non-array, append the value */ |
| 551 | } |
| 552 | pn_data_restore(src, point); |
| 553 | return err; |
| 554 | } |
| 555 | |
| 556 | |
| 557 | /* Format codes: |
no test coverage detected