| 393 | } |
| 394 | |
| 395 | ssize_t pn_encoder_encode(pn_encoder_t *encoder, pn_data_t *src, char *dst, size_t size) |
| 396 | { |
| 397 | encoder->output = dst; |
| 398 | encoder->position = 0; |
| 399 | encoder->size = size; |
| 400 | |
| 401 | int err = pni_data_traverse(src, pni_encoder_enter, pni_encoder_exit, encoder); |
| 402 | if (err) return err; |
| 403 | size_t encoded = encoder->position; |
| 404 | if (encoded > size) { |
| 405 | pn_error_format(pn_data_error(src), PN_OVERFLOW, "not enough space to encode"); |
| 406 | return PN_OVERFLOW; |
| 407 | } |
| 408 | return (ssize_t)encoded; |
| 409 | } |
| 410 | |
| 411 | ssize_t pn_encoder_size(pn_encoder_t *encoder, pn_data_t *src) |
| 412 | { |
no test coverage detected