| // Copyright 2021 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| package codegen |
| |
| const tmplDecoderEncoder = ` |
| {{- define "DecoderEncoder" -}} |
| [](uint8_t* bytes, uint32_t num_bytes, zx_handle_info_t* handles, uint32_t num_handles) -> |
| :std::pair<zx_status_t, zx_status_t> { |
| {{ .Wire }}::DecodedMessage decoded(bytes, num_bytes); |
| |
| if (decoded.status() != ZX_OK) { |
| return ::std::make_pair<zx_status_t, zx_status_t>(decoded.status(), ZX_ERR_INTERNAL); |
| } |
| |
| {{ .Wire }}* value = decoded.PrimaryObject(); |
| {{ .Wire }}::OwnedByteEncodedMessage encoded(value); |
| |
| if (encoded.status() != ZX_OK) { |
| return ::std::make_pair<zx_status_t, zx_status_t>(decoded.status(), encoded.status()); |
| } |
| |
| fidl_outgoing_message_t* message = encoded.GetOutgoingMessage.message(); |
| // TODO: Verify re-encoded message matches initial message. |
| return ::std::make_pair<zx_status_t, zx_status_t>(decoded.status(), encoded.status()); |
| } |
| {{- end -}} |
| ` |