|  | // WARNING: This file is machine generated by fidlgen. | 
|  |  | 
|  | #pragma once | 
|  |  | 
|  | #include <lib/fidl/internal.h> | 
|  | #include <lib/fidl/llcpp/array.h> | 
|  | #include <lib/fidl/llcpp/buffer_allocator.h> | 
|  | #include <lib/fidl/llcpp/buffer_then_heap_allocator.h> | 
|  | #include <lib/fidl/llcpp/coding.h> | 
|  | #include <lib/fidl/llcpp/envelope.h> | 
|  | #include <lib/fidl/llcpp/errors.h> | 
|  | #include <lib/fidl/llcpp/memory.h> | 
|  | #include <lib/fidl/llcpp/message.h> | 
|  | #include <lib/fidl/llcpp/message_storage.h> | 
|  | #include <lib/fidl/llcpp/object_view.h> | 
|  | #include <lib/fidl/llcpp/string_view.h> | 
|  | #include <lib/fidl/llcpp/tracking_ptr.h> | 
|  | #include <lib/fidl/llcpp/traits.h> | 
|  | #include <lib/fidl/llcpp/vector_view.h> | 
|  | #include <lib/fit/function.h> | 
|  | #include <lib/stdcompat/optional.h> | 
|  |  | 
|  | #include <algorithm> | 
|  | #include <cstddef> | 
|  | #include <variant> | 
|  | #ifdef __Fuchsia__ | 
|  | #include <lib/fidl/llcpp/client.h> | 
|  | #include <lib/fidl/llcpp/client_end.h> | 
|  | #include <lib/fidl/llcpp/connect_service.h> | 
|  | #include <lib/fidl/llcpp/result.h> | 
|  | #include <lib/fidl/llcpp/server.h> | 
|  | #include <lib/fidl/llcpp/server_end.h> | 
|  | #include <lib/fidl/llcpp/service_handler_interface.h> | 
|  | #include <lib/fidl/llcpp/sync_call.h> | 
|  | #include <lib/fidl/llcpp/transaction.h> | 
|  | #include <lib/fidl/txn_header.h> | 
|  | #include <lib/zx/channel.h> | 
|  |  | 
|  | #endif  // __Fuchsia__ | 
|  | #include <zircon/fidl.h> | 
|  |  | 
|  | namespace llcpp { | 
|  | namespace fidl { | 
|  | namespace test { | 
|  | namespace emptystruct { | 
|  | namespace wire { | 
|  | struct Empty; | 
|  | }  // namespace wire | 
|  | using Empty = ::llcpp::fidl::test::emptystruct::wire::Empty; | 
|  |  | 
|  | class EmptyProtocol; | 
|  | namespace wire { | 
|  |  | 
|  | extern "C" const fidl_type_t fidl_test_emptystruct_EmptyTable; | 
|  |  | 
|  | struct Empty { | 
|  | static constexpr const fidl_type_t* Type = &fidl_test_emptystruct_EmptyTable; | 
|  | static constexpr uint32_t MaxNumHandles = 0; | 
|  | static constexpr uint32_t PrimarySize = 1; | 
|  | [[maybe_unused]] static constexpr uint32_t MaxOutOfLine = 0; | 
|  | static constexpr bool HasPointer = false; | 
|  |  | 
|  | uint8_t __reserved = {}; | 
|  |  | 
|  | private: | 
|  | class UnownedEncodedByteMessage final { | 
|  | public: | 
|  | UnownedEncodedByteMessage(uint8_t* bytes, uint32_t byte_size, Empty* value) | 
|  | : message_(bytes, byte_size, sizeof(Empty), nullptr, 0, 0) { | 
|  | message_.Encode<Empty>(value); | 
|  | } | 
|  | UnownedEncodedByteMessage(const UnownedEncodedByteMessage&) = delete; | 
|  | UnownedEncodedByteMessage(UnownedEncodedByteMessage&&) = delete; | 
|  | UnownedEncodedByteMessage* operator=(const UnownedEncodedByteMessage&) = | 
|  | delete; | 
|  | UnownedEncodedByteMessage* operator=(UnownedEncodedByteMessage&&) = delete; | 
|  |  | 
|  | zx_status_t status() const { return message_.status(); } | 
|  | #ifdef __Fuchsia__ | 
|  | const char* status_string() const { return message_.status_string(); } | 
|  | #endif | 
|  | bool ok() const { return message_.status() == ZX_OK; } | 
|  | const char* error() const { return message_.error(); } | 
|  |  | 
|  | ::fidl::OutgoingByteMessage& GetOutgoingMessage() { return message_; } | 
|  |  | 
|  | private: | 
|  | ::fidl::OutgoingByteMessage message_; | 
|  | }; | 
|  |  | 
|  | class UnownedEncodedIovecMessage final { | 
|  | public: | 
|  | UnownedEncodedIovecMessage(zx_channel_iovec_t* iovecs, uint32_t iovec_size, | 
|  | fidl_iovec_substitution_t* substitutions, | 
|  | uint32_t substitutions_size, Empty* value) | 
|  | : message_(::fidl::OutgoingIovecMessage::constructor_args{ | 
|  | .iovecs = iovecs, | 
|  | .iovecs_actual = 0, | 
|  | .iovecs_capacity = iovec_size, | 
|  | .substitutions = substitutions, | 
|  | .substitutions_actual = 0, | 
|  | .substitutions_capacity = substitutions_size, | 
|  | .handles = nullptr, | 
|  | .handle_actual = 0, | 
|  | .handle_capacity = 0, | 
|  | }) { | 
|  | message_.Encode<Empty>(value); | 
|  | } | 
|  | UnownedEncodedIovecMessage(const UnownedEncodedIovecMessage&) = delete; | 
|  | UnownedEncodedIovecMessage(UnownedEncodedIovecMessage&&) = delete; | 
|  | UnownedEncodedIovecMessage* operator=(const UnownedEncodedIovecMessage&) = | 
|  | delete; | 
|  | UnownedEncodedIovecMessage* operator=(UnownedEncodedIovecMessage&&) = | 
|  | delete; | 
|  |  | 
|  | zx_status_t status() const { return message_.status(); } | 
|  | #ifdef __Fuchsia__ | 
|  | const char* status_string() const { return message_.status_string(); } | 
|  | #endif | 
|  | bool ok() const { return message_.status() == ZX_OK; } | 
|  | const char* error() const { return message_.error(); } | 
|  |  | 
|  | ::fidl::OutgoingIovecMessage& GetOutgoingMessage() { return message_; } | 
|  |  | 
|  | private: | 
|  | ::fidl::OutgoingIovecMessage message_; | 
|  | }; | 
|  |  | 
|  | class OwnedEncodedByteMessage final { | 
|  | public: | 
|  | explicit OwnedEncodedByteMessage(Empty* value) | 
|  | : message_(bytes_, sizeof(bytes_), value) {} | 
|  | OwnedEncodedByteMessage(const OwnedEncodedByteMessage&) = delete; | 
|  | OwnedEncodedByteMessage(OwnedEncodedByteMessage&&) = delete; | 
|  | OwnedEncodedByteMessage* operator=(const OwnedEncodedByteMessage&) = delete; | 
|  | OwnedEncodedByteMessage* operator=(OwnedEncodedByteMessage&&) = delete; | 
|  |  | 
|  | zx_status_t status() const { return message_.status(); } | 
|  | #ifdef __Fuchsia__ | 
|  | const char* status_string() const { return message_.status_string(); } | 
|  | #endif | 
|  | bool ok() const { return message_.ok(); } | 
|  | const char* error() const { return message_.error(); } | 
|  |  | 
|  | ::fidl::OutgoingByteMessage& GetOutgoingMessage() { | 
|  | return message_.GetOutgoingMessage(); | 
|  | } | 
|  |  | 
|  | private: | 
|  | FIDL_ALIGNDECL | 
|  | uint8_t bytes_[FIDL_ALIGN(PrimarySize + MaxOutOfLine)]; | 
|  | UnownedEncodedByteMessage message_; | 
|  | }; | 
|  |  | 
|  | class OwnedEncodedIovecMessage final { | 
|  | public: | 
|  | explicit OwnedEncodedIovecMessage(Empty* value) | 
|  | : message_(iovecs_, ::fidl::internal::kIovecBufferSize, substitutions_, | 
|  | ::fidl::internal::kIovecBufferSize, value) {} | 
|  | OwnedEncodedIovecMessage(const OwnedEncodedIovecMessage&) = delete; | 
|  | OwnedEncodedIovecMessage(OwnedEncodedIovecMessage&&) = delete; | 
|  | OwnedEncodedIovecMessage* operator=(const OwnedEncodedIovecMessage&) = | 
|  | delete; | 
|  | OwnedEncodedIovecMessage* operator=(OwnedEncodedIovecMessage&&) = delete; | 
|  |  | 
|  | zx_status_t status() const { return message_.status(); } | 
|  | #ifdef __Fuchsia__ | 
|  | const char* status_string() const { return message_.status_string(); } | 
|  | #endif | 
|  | bool ok() const { return message_.ok(); } | 
|  | const char* error() const { return message_.error(); } | 
|  |  | 
|  | ::fidl::OutgoingIovecMessage& GetOutgoingMessage() { | 
|  | return message_.GetOutgoingMessage(); | 
|  | } | 
|  |  | 
|  | private: | 
|  | zx_channel_iovec_t iovecs_[::fidl::internal::kIovecBufferSize]; | 
|  | fidl_iovec_substitution_t | 
|  | substitutions_[::fidl::internal::kIovecBufferSize]; | 
|  | UnownedEncodedIovecMessage message_; | 
|  | }; | 
|  |  | 
|  | public: | 
|  | friend ::fidl::internal::EncodedMessageTypes<Empty>; | 
|  | using OwnedEncodedMessage = OwnedEncodedByteMessage; | 
|  | using UnownedEncodedMessage = UnownedEncodedByteMessage; | 
|  |  | 
|  | class DecodedMessage final : public ::fidl::internal::IncomingMessage { | 
|  | public: | 
|  | DecodedMessage(uint8_t* bytes, uint32_t byte_actual, | 
|  | zx_handle_info_t* handles = nullptr, | 
|  | uint32_t handle_actual = 0) | 
|  | : ::fidl::internal::IncomingMessage(bytes, byte_actual, handles, | 
|  | handle_actual) { | 
|  | Decode<struct Empty>(); | 
|  | } | 
|  | DecodedMessage(fidl_incoming_msg_t* msg) | 
|  | : ::fidl::internal::IncomingMessage(msg) { | 
|  | Decode<struct Empty>(); | 
|  | } | 
|  | DecodedMessage(const DecodedMessage&) = delete; | 
|  | DecodedMessage(DecodedMessage&&) = delete; | 
|  | DecodedMessage* operator=(const DecodedMessage&) = delete; | 
|  | DecodedMessage* operator=(DecodedMessage&&) = delete; | 
|  |  | 
|  | struct Empty* PrimaryObject() { | 
|  | ZX_DEBUG_ASSERT(ok()); | 
|  | return reinterpret_cast<struct Empty*>(bytes()); | 
|  | } | 
|  |  | 
|  | // Release the ownership of the decoded message. That means that the handles | 
|  | // won't be closed When the object is destroyed. After calling this method, | 
|  | // the DecodedMessage object should not be used anymore. | 
|  | void ReleasePrimaryObject() { ResetBytes(); } | 
|  | }; | 
|  | }; | 
|  |  | 
|  | }  // namespace wire | 
|  | extern "C" const fidl_type_t | 
|  | fidl_test_emptystruct_EmptyProtocolSendRequestTable; | 
|  |  | 
|  | extern "C" const fidl_type_t | 
|  | fidl_test_emptystruct_EmptyProtocolSendResponseTable; | 
|  |  | 
|  | extern "C" const fidl_type_t | 
|  | fidl_test_emptystruct_EmptyProtocolReceiveRequestTable; | 
|  |  | 
|  | extern "C" const fidl_type_t | 
|  | fidl_test_emptystruct_EmptyProtocolReceiveEventTable; | 
|  |  | 
|  | extern "C" const fidl_type_t | 
|  | fidl_test_emptystruct_EmptyProtocolSendAndReceiveRequestTable; | 
|  |  | 
|  | extern "C" const fidl_type_t | 
|  | fidl_test_emptystruct_EmptyProtocolSendAndReceiveResponseTable; | 
|  |  | 
|  | class EmptyProtocol final { | 
|  | EmptyProtocol() = delete; | 
|  |  | 
|  | public: | 
|  | struct SendRequest final { | 
|  | FIDL_ALIGNDECL | 
|  | fidl_message_header_t _hdr; | 
|  | ::llcpp::fidl::test::emptystruct::wire::Empty e; | 
|  | explicit SendRequest(zx_txid_t _txid, | 
|  | ::llcpp::fidl::test::emptystruct::wire::Empty& e) | 
|  | : e(std::move(e)) { | 
|  | _InitHeader(_txid); | 
|  | } | 
|  | explicit SendRequest(zx_txid_t _txid) { _InitHeader(_txid); } | 
|  |  | 
|  | static constexpr const fidl_type_t* Type = | 
|  | &::llcpp::fidl::test::emptystruct:: | 
|  | fidl_test_emptystruct_EmptyProtocolSendRequestTable; | 
|  | static constexpr uint32_t MaxNumHandles = 0; | 
|  | static constexpr uint32_t PrimarySize = 24; | 
|  | static constexpr uint32_t MaxOutOfLine = 0; | 
|  | static constexpr uint32_t AltPrimarySize = 24; | 
|  | static constexpr uint32_t AltMaxOutOfLine = 0; | 
|  | static constexpr bool HasFlexibleEnvelope = false; | 
|  | static constexpr bool HasPointer = false; | 
|  | static constexpr ::fidl::internal::TransactionalMessageKind MessageKind = | 
|  | ::fidl::internal::TransactionalMessageKind::kRequest; | 
|  |  | 
|  | private: | 
|  | class UnownedEncodedByteMessage final { | 
|  | public: | 
|  | UnownedEncodedByteMessage( | 
|  | uint8_t* _bytes, uint32_t _byte_size, zx_txid_t _txid, | 
|  | ::llcpp::fidl::test::emptystruct::wire::Empty& e) | 
|  | : message_(_bytes, _byte_size, sizeof(SendRequest), nullptr, 0, 0) { | 
|  | FIDL_ALIGNDECL SendRequest _request(_txid, e); | 
|  | message_.Encode<SendRequest>(&_request); | 
|  | } | 
|  | UnownedEncodedByteMessage(uint8_t* bytes, uint32_t byte_size, | 
|  | SendRequest* request) | 
|  | : message_(bytes, byte_size, sizeof(SendRequest), nullptr, 0, 0) { | 
|  | message_.Encode<SendRequest>(request); | 
|  | } | 
|  | UnownedEncodedByteMessage(const UnownedEncodedByteMessage&) = delete; | 
|  | UnownedEncodedByteMessage(UnownedEncodedByteMessage&&) = delete; | 
|  | UnownedEncodedByteMessage* operator=(const UnownedEncodedByteMessage&) = | 
|  | delete; | 
|  | UnownedEncodedByteMessage* operator=(UnownedEncodedByteMessage&&) = | 
|  | delete; | 
|  |  | 
|  | zx_status_t status() const { return message_.status(); } | 
|  | #ifdef __Fuchsia__ | 
|  | const char* status_string() const { return message_.status_string(); } | 
|  | #endif | 
|  | bool ok() const { return message_.status() == ZX_OK; } | 
|  | const char* error() const { return message_.error(); } | 
|  |  | 
|  | ::fidl::OutgoingByteMessage& GetOutgoingMessage() { return message_; } | 
|  |  | 
|  | #ifdef __Fuchsia__ | 
|  | template <typename ChannelLike> | 
|  | void Write(ChannelLike&& client) { | 
|  | message_.Write(std::forward<ChannelLike>(client)); | 
|  | } | 
|  | #endif | 
|  |  | 
|  | private: | 
|  | ::fidl::OutgoingByteMessage message_; | 
|  | }; | 
|  |  | 
|  | class UnownedEncodedIovecMessage final { | 
|  | public: | 
|  | UnownedEncodedIovecMessage( | 
|  | zx_channel_iovec_t* iovecs, uint32_t iovec_size, | 
|  | fidl_iovec_substitution_t* substitutions, uint32_t substitutions_size, | 
|  | zx_txid_t _txid, ::llcpp::fidl::test::emptystruct::wire::Empty& e) | 
|  | : message_(::fidl::OutgoingIovecMessage::constructor_args{ | 
|  | .iovecs = iovecs, | 
|  | .iovecs_actual = 0, | 
|  | .iovecs_capacity = iovec_size, | 
|  | .substitutions = substitutions, | 
|  | .substitutions_actual = 0, | 
|  | .substitutions_capacity = substitutions_size, | 
|  | .handles = nullptr, | 
|  | .handle_actual = 0, | 
|  | .handle_capacity = 0, | 
|  | }) { | 
|  | FIDL_ALIGNDECL SendRequest _request(_txid, e); | 
|  | message_.Encode<SendRequest>(&_request); | 
|  | } | 
|  | UnownedEncodedIovecMessage(zx_channel_iovec_t* iovecs, | 
|  | uint32_t iovec_size, | 
|  | fidl_iovec_substitution_t* substitutions, | 
|  | uint32_t substitutions_size, | 
|  | SendRequest* request) | 
|  | : message_(::fidl::OutgoingIovecMessage::constructor_args{ | 
|  | .iovecs = iovecs, | 
|  | .iovecs_actual = 0, | 
|  | .iovecs_capacity = iovec_size, | 
|  | .substitutions = substitutions, | 
|  | .substitutions_actual = 0, | 
|  | .substitutions_capacity = substitutions_size, | 
|  | .handles = nullptr, | 
|  | .handle_actual = 0, | 
|  | .handle_capacity = 0, | 
|  | }) { | 
|  | message_.Encode<SendRequest>(request); | 
|  | } | 
|  | UnownedEncodedIovecMessage(const UnownedEncodedIovecMessage&) = delete; | 
|  | UnownedEncodedIovecMessage(UnownedEncodedIovecMessage&&) = delete; | 
|  | UnownedEncodedIovecMessage* operator=(const UnownedEncodedIovecMessage&) = | 
|  | delete; | 
|  | UnownedEncodedIovecMessage* operator=(UnownedEncodedIovecMessage&&) = | 
|  | delete; | 
|  |  | 
|  | zx_status_t status() const { return message_.status(); } | 
|  | #ifdef __Fuchsia__ | 
|  | const char* status_string() const { return message_.status_string(); } | 
|  | #endif | 
|  | bool ok() const { return message_.status() == ZX_OK; } | 
|  | const char* error() const { return message_.error(); } | 
|  |  | 
|  | ::fidl::OutgoingIovecMessage& GetOutgoingMessage() { return message_; } | 
|  |  | 
|  | #ifdef __Fuchsia__ | 
|  | template <typename ChannelLike> | 
|  | void Write(ChannelLike&& client) { | 
|  | message_.Write(std::forward<ChannelLike>(client)); | 
|  | } | 
|  | #endif | 
|  |  | 
|  | private: | 
|  | ::fidl::OutgoingIovecMessage message_; | 
|  | }; | 
|  |  | 
|  | class OwnedEncodedByteMessage final { | 
|  | public: | 
|  | explicit OwnedEncodedByteMessage( | 
|  | zx_txid_t _txid, ::llcpp::fidl::test::emptystruct::wire::Empty& e) | 
|  | : message_(bytes_, sizeof(bytes_), _txid, e) {} | 
|  | explicit OwnedEncodedByteMessage(SendRequest* request) | 
|  | : message_(bytes_, sizeof(bytes_), request) {} | 
|  | OwnedEncodedByteMessage(const OwnedEncodedByteMessage&) = delete; | 
|  | OwnedEncodedByteMessage(OwnedEncodedByteMessage&&) = delete; | 
|  | OwnedEncodedByteMessage* operator=(const OwnedEncodedByteMessage&) = | 
|  | delete; | 
|  | OwnedEncodedByteMessage* operator=(OwnedEncodedByteMessage&&) = delete; | 
|  |  | 
|  | zx_status_t status() const { return message_.status(); } | 
|  | #ifdef __Fuchsia__ | 
|  | const char* status_string() const { return message_.status_string(); } | 
|  | #endif | 
|  | bool ok() const { return message_.ok(); } | 
|  | const char* error() const { return message_.error(); } | 
|  |  | 
|  | ::fidl::OutgoingByteMessage& GetOutgoingMessage() { | 
|  | return message_.GetOutgoingMessage(); | 
|  | } | 
|  |  | 
|  | #ifdef __Fuchsia__ | 
|  | template <typename ChannelLike> | 
|  | void Write(ChannelLike&& client) { | 
|  | message_.Write(std::forward<ChannelLike>(client)); | 
|  | } | 
|  | #endif | 
|  |  | 
|  | private: | 
|  | FIDL_ALIGNDECL | 
|  | uint8_t bytes_[PrimarySize + MaxOutOfLine]; | 
|  | UnownedEncodedByteMessage message_; | 
|  | }; | 
|  |  | 
|  | class OwnedEncodedIovecMessage final { | 
|  | public: | 
|  | explicit OwnedEncodedIovecMessage( | 
|  | zx_txid_t _txid, ::llcpp::fidl::test::emptystruct::wire::Empty& e) | 
|  | : message_(iovecs_, ::fidl::internal::kIovecBufferSize, | 
|  | substitutions_, ::fidl::internal::kIovecBufferSize, _txid, | 
|  | e) {} | 
|  | explicit OwnedEncodedIovecMessage(SendRequest* request) | 
|  | : message_(iovecs_, ::fidl::internal::kIovecBufferSize, | 
|  | substitutions_, ::fidl::internal::kIovecBufferSize, | 
|  | request) {} | 
|  | OwnedEncodedIovecMessage(const OwnedEncodedIovecMessage&) = delete; | 
|  | OwnedEncodedIovecMessage(OwnedEncodedIovecMessage&&) = delete; | 
|  | OwnedEncodedIovecMessage* operator=(const OwnedEncodedIovecMessage&) = | 
|  | delete; | 
|  | OwnedEncodedIovecMessage* operator=(OwnedEncodedIovecMessage&&) = delete; | 
|  |  | 
|  | zx_status_t status() const { return message_.status(); } | 
|  | #ifdef __Fuchsia__ | 
|  | const char* status_string() const { return message_.status_string(); } | 
|  | #endif | 
|  | bool ok() const { return message_.ok(); } | 
|  | const char* error() const { return message_.error(); } | 
|  |  | 
|  | ::fidl::OutgoingIovecMessage& GetOutgoingMessage() { | 
|  | return message_.GetOutgoingMessage(); | 
|  | } | 
|  |  | 
|  | #ifdef __Fuchsia__ | 
|  | template <typename ChannelLike> | 
|  | void Write(ChannelLike&& client) { | 
|  | message_.Write(std::forward<ChannelLike>(client)); | 
|  | } | 
|  | #endif | 
|  |  | 
|  | private: | 
|  | zx_channel_iovec_t iovecs_[::fidl::internal::kIovecBufferSize]; | 
|  | fidl_iovec_substitution_t | 
|  | substitutions_[::fidl::internal::kIovecBufferSize]; | 
|  | UnownedEncodedIovecMessage message_; | 
|  | }; | 
|  |  | 
|  | public: | 
|  | friend ::fidl::internal::EncodedMessageTypes<SendRequest>; | 
|  | using OwnedEncodedMessage = OwnedEncodedByteMessage; | 
|  | using UnownedEncodedMessage = UnownedEncodedByteMessage; | 
|  |  | 
|  | class DecodedMessage final : public ::fidl::internal::IncomingMessage { | 
|  | public: | 
|  | DecodedMessage(uint8_t* bytes, uint32_t byte_actual, | 
|  | zx_handle_info_t* handles = nullptr, | 
|  | uint32_t handle_actual = 0) | 
|  | : ::fidl::internal::IncomingMessage(bytes, byte_actual, handles, | 
|  | handle_actual) { | 
|  | Decode<SendRequest>(); | 
|  | } | 
|  | DecodedMessage(fidl_incoming_msg_t* msg) | 
|  | : ::fidl::internal::IncomingMessage(msg) { | 
|  | Decode<SendRequest>(); | 
|  | } | 
|  | DecodedMessage(const DecodedMessage&) = delete; | 
|  | DecodedMessage(DecodedMessage&&) = delete; | 
|  | DecodedMessage* operator=(const DecodedMessage&) = delete; | 
|  | DecodedMessage* operator=(DecodedMessage&&) = delete; | 
|  |  | 
|  | SendRequest* PrimaryObject() { | 
|  | ZX_DEBUG_ASSERT(ok()); | 
|  | return reinterpret_cast<SendRequest*>(bytes()); | 
|  | } | 
|  |  | 
|  | // Release the ownership of the decoded message. That means that the | 
|  | // handles won't be closed When the object is destroyed. After calling | 
|  | // this method, the DecodedMessage object should not be used anymore. | 
|  | void ReleasePrimaryObject() { ResetBytes(); } | 
|  | }; | 
|  |  | 
|  | private: | 
|  | void _InitHeader(zx_txid_t _txid); | 
|  | }; | 
|  |  | 
|  | struct ReceiveResponse final { | 
|  | FIDL_ALIGNDECL | 
|  | fidl_message_header_t _hdr; | 
|  | ::llcpp::fidl::test::emptystruct::wire::Empty e; | 
|  | explicit ReceiveResponse(::llcpp::fidl::test::emptystruct::wire::Empty& e) | 
|  | : e(std::move(e)) { | 
|  | _InitHeader(); | 
|  | } | 
|  | ReceiveResponse() { _InitHeader(); } | 
|  |  | 
|  | static constexpr const fidl_type_t* Type = | 
|  | &::llcpp::fidl::test::emptystruct:: | 
|  | fidl_test_emptystruct_EmptyProtocolReceiveEventTable; | 
|  | static constexpr uint32_t MaxNumHandles = 0; | 
|  | static constexpr uint32_t PrimarySize = 24; | 
|  | static constexpr uint32_t MaxOutOfLine = 0; | 
|  | static constexpr bool HasFlexibleEnvelope = false; | 
|  | static constexpr bool HasPointer = false; | 
|  | static constexpr ::fidl::internal::TransactionalMessageKind MessageKind = | 
|  | ::fidl::internal::TransactionalMessageKind::kResponse; | 
|  |  | 
|  | private: | 
|  | class UnownedEncodedByteMessage final { | 
|  | public: | 
|  | UnownedEncodedByteMessage( | 
|  | uint8_t* _bytes, uint32_t _byte_size, | 
|  | ::llcpp::fidl::test::emptystruct::wire::Empty& e) | 
|  | : message_(_bytes, _byte_size, sizeof(ReceiveResponse), nullptr, 0, | 
|  | 0) { | 
|  | FIDL_ALIGNDECL ReceiveResponse _response{e}; | 
|  | message_.Encode<ReceiveResponse>(&_response); | 
|  | } | 
|  | UnownedEncodedByteMessage(uint8_t* bytes, uint32_t byte_size, | 
|  | ReceiveResponse* response) | 
|  | : message_(bytes, byte_size, sizeof(ReceiveResponse), nullptr, 0, 0) { | 
|  | message_.Encode<ReceiveResponse>(response); | 
|  | } | 
|  | UnownedEncodedByteMessage(const UnownedEncodedByteMessage&) = delete; | 
|  | UnownedEncodedByteMessage(UnownedEncodedByteMessage&&) = delete; | 
|  | UnownedEncodedByteMessage* operator=(const UnownedEncodedByteMessage&) = | 
|  | delete; | 
|  | UnownedEncodedByteMessage* operator=(UnownedEncodedByteMessage&&) = | 
|  | delete; | 
|  |  | 
|  | zx_status_t status() const { return message_.status(); } | 
|  | #ifdef __Fuchsia__ | 
|  | const char* status_string() const { return message_.status_string(); } | 
|  | #endif | 
|  | bool ok() const { return message_.status() == ZX_OK; } | 
|  | const char* error() const { return message_.error(); } | 
|  |  | 
|  | ::fidl::OutgoingByteMessage& GetOutgoingMessage() { return message_; } | 
|  |  | 
|  | #ifdef __Fuchsia__ | 
|  | template <typename ChannelLike> | 
|  | void Write(ChannelLike&& client) { | 
|  | message_.Write(std::forward<ChannelLike>(client)); | 
|  | } | 
|  | #endif | 
|  |  | 
|  | private: | 
|  | ::fidl::OutgoingByteMessage message_; | 
|  | }; | 
|  |  | 
|  | class UnownedEncodedIovecMessage final { | 
|  | public: | 
|  | UnownedEncodedIovecMessage( | 
|  | zx_channel_iovec_t* iovecs, uint32_t iovec_size, | 
|  | fidl_iovec_substitution_t* substitutions, uint32_t substitutions_size, | 
|  | ::llcpp::fidl::test::emptystruct::wire::Empty& e) | 
|  | : message_(::fidl::OutgoingIovecMessage::constructor_args{ | 
|  | .iovecs = iovecs, | 
|  | .iovecs_actual = 0, | 
|  | .iovecs_capacity = iovec_size, | 
|  | .substitutions = substitutions, | 
|  | .substitutions_actual = 0, | 
|  | .substitutions_capacity = substitutions_size, | 
|  | .handles = nullptr, | 
|  | .handle_actual = 0, | 
|  | .handle_capacity = 0, | 
|  | }) { | 
|  | FIDL_ALIGNDECL ReceiveResponse _response{e}; | 
|  | message_.Encode<ReceiveResponse>(&_response); | 
|  | } | 
|  | UnownedEncodedIovecMessage(zx_channel_iovec_t* iovecs, | 
|  | uint32_t iovec_size, | 
|  | fidl_iovec_substitution_t* substitutions, | 
|  | uint32_t substitutions_size, | 
|  | ReceiveResponse* response) | 
|  | : message_(::fidl::OutgoingIovecMessage::constructor_args{ | 
|  | .iovecs = iovecs, | 
|  | .iovecs_actual = 0, | 
|  | .iovecs_capacity = iovec_size, | 
|  | .substitutions = substitutions, | 
|  | .substitutions_actual = 0, | 
|  | .substitutions_capacity = substitutions_size, | 
|  | .handles = nullptr, | 
|  | .handle_actual = 0, | 
|  | .handle_capacity = 0, | 
|  | }) { | 
|  | message_.Encode<ReceiveResponse>(response); | 
|  | } | 
|  | UnownedEncodedIovecMessage(const UnownedEncodedIovecMessage&) = delete; | 
|  | UnownedEncodedIovecMessage(UnownedEncodedIovecMessage&&) = delete; | 
|  | UnownedEncodedIovecMessage* operator=(const UnownedEncodedIovecMessage&) = | 
|  | delete; | 
|  | UnownedEncodedIovecMessage* operator=(UnownedEncodedIovecMessage&&) = | 
|  | delete; | 
|  |  | 
|  | zx_status_t status() const { return message_.status(); } | 
|  | #ifdef __Fuchsia__ | 
|  | const char* status_string() const { return message_.status_string(); } | 
|  | #endif | 
|  | bool ok() const { return message_.status() == ZX_OK; } | 
|  | const char* error() const { return message_.error(); } | 
|  |  | 
|  | ::fidl::OutgoingIovecMessage& GetOutgoingMessage() { return message_; } | 
|  |  | 
|  | #ifdef __Fuchsia__ | 
|  | template <typename ChannelLike> | 
|  | void Write(ChannelLike&& client) { | 
|  | message_.Write(std::forward<ChannelLike>(client)); | 
|  | } | 
|  | #endif | 
|  |  | 
|  | private: | 
|  | ::fidl::OutgoingIovecMessage message_; | 
|  | }; | 
|  |  | 
|  | class OwnedEncodedByteMessage final { | 
|  | public: | 
|  | explicit OwnedEncodedByteMessage( | 
|  | ::llcpp::fidl::test::emptystruct::wire::Empty& e) | 
|  | : message_(bytes_, sizeof(bytes_), e) {} | 
|  | explicit OwnedEncodedByteMessage(ReceiveResponse* response) | 
|  | : message_(bytes_, sizeof(bytes_), response) {} | 
|  | OwnedEncodedByteMessage(const OwnedEncodedByteMessage&) = delete; | 
|  | OwnedEncodedByteMessage(OwnedEncodedByteMessage&&) = delete; | 
|  | OwnedEncodedByteMessage* operator=(const OwnedEncodedByteMessage&) = | 
|  | delete; | 
|  | OwnedEncodedByteMessage* operator=(OwnedEncodedByteMessage&&) = delete; | 
|  |  | 
|  | zx_status_t status() const { return message_.status(); } | 
|  | #ifdef __Fuchsia__ | 
|  | const char* status_string() const { return message_.status_string(); } | 
|  | #endif | 
|  | bool ok() const { return message_.ok(); } | 
|  | const char* error() const { return message_.error(); } | 
|  |  | 
|  | ::fidl::OutgoingByteMessage& GetOutgoingMessage() { | 
|  | return message_.GetOutgoingMessage(); | 
|  | } | 
|  |  | 
|  | #ifdef __Fuchsia__ | 
|  | template <typename ChannelLike> | 
|  | void Write(ChannelLike&& client) { | 
|  | message_.Write(std::forward<ChannelLike>(client)); | 
|  | } | 
|  | #endif | 
|  |  | 
|  | private: | 
|  | FIDL_ALIGNDECL | 
|  | uint8_t bytes_[PrimarySize + MaxOutOfLine]; | 
|  | UnownedEncodedByteMessage message_; | 
|  | }; | 
|  |  | 
|  | class OwnedEncodedIovecMessage final { | 
|  | public: | 
|  | explicit OwnedEncodedIovecMessage( | 
|  | ::llcpp::fidl::test::emptystruct::wire::Empty& e) | 
|  | : message_(iovecs_, ::fidl::internal::kIovecBufferSize, | 
|  | substitutions_, ::fidl::internal::kIovecBufferSize, e) {} | 
|  | explicit OwnedEncodedIovecMessage(ReceiveResponse* response) | 
|  | : message_(iovecs_, ::fidl::internal::kIovecBufferSize, | 
|  | substitutions_, ::fidl::internal::kIovecBufferSize, | 
|  | response) {} | 
|  | OwnedEncodedIovecMessage(const OwnedEncodedIovecMessage&) = delete; | 
|  | OwnedEncodedIovecMessage(OwnedEncodedIovecMessage&&) = delete; | 
|  | OwnedEncodedIovecMessage* operator=(const OwnedEncodedIovecMessage&) = | 
|  | delete; | 
|  | OwnedEncodedIovecMessage* operator=(OwnedEncodedIovecMessage&&) = delete; | 
|  |  | 
|  | zx_status_t status() const { return message_.status(); } | 
|  | #ifdef __Fuchsia__ | 
|  | const char* status_string() const { return message_.status_string(); } | 
|  | #endif | 
|  | bool ok() const { return message_.ok(); } | 
|  | const char* error() const { return message_.error(); } | 
|  |  | 
|  | ::fidl::OutgoingIovecMessage& GetOutgoingMessage() { | 
|  | return message_.GetOutgoingMessage(); | 
|  | } | 
|  |  | 
|  | #ifdef __Fuchsia__ | 
|  | template <typename ChannelLike> | 
|  | void Write(ChannelLike&& client) { | 
|  | message_.Write(std::forward<ChannelLike>(client)); | 
|  | } | 
|  | #endif | 
|  |  | 
|  | private: | 
|  | zx_channel_iovec_t iovecs_[::fidl::internal::kIovecBufferSize]; | 
|  | fidl_iovec_substitution_t | 
|  | substitutions_[::fidl::internal::kIovecBufferSize]; | 
|  | UnownedEncodedIovecMessage message_; | 
|  | }; | 
|  |  | 
|  | public: | 
|  | friend ::fidl::internal::EncodedMessageTypes<ReceiveResponse>; | 
|  | using OwnedEncodedMessage = OwnedEncodedByteMessage; | 
|  | using UnownedEncodedMessage = UnownedEncodedByteMessage; | 
|  |  | 
|  | class DecodedMessage final : public ::fidl::internal::IncomingMessage { | 
|  | public: | 
|  | DecodedMessage(uint8_t* bytes, uint32_t byte_actual, | 
|  | zx_handle_info_t* handles = nullptr, | 
|  | uint32_t handle_actual = 0) | 
|  | : ::fidl::internal::IncomingMessage(bytes, byte_actual, handles, | 
|  | handle_actual) { | 
|  | Decode<ReceiveResponse>(); | 
|  | } | 
|  | DecodedMessage(fidl_incoming_msg_t* msg) | 
|  | : ::fidl::internal::IncomingMessage(msg) { | 
|  | Decode<ReceiveResponse>(); | 
|  | } | 
|  | DecodedMessage(const DecodedMessage&) = delete; | 
|  | DecodedMessage(DecodedMessage&&) = delete; | 
|  | DecodedMessage* operator=(const DecodedMessage&) = delete; | 
|  | DecodedMessage* operator=(DecodedMessage&&) = delete; | 
|  |  | 
|  | ReceiveResponse* PrimaryObject() { | 
|  | ZX_DEBUG_ASSERT(ok()); | 
|  | return reinterpret_cast<ReceiveResponse*>(bytes()); | 
|  | } | 
|  |  | 
|  | // Release the ownership of the decoded message. That means that the | 
|  | // handles won't be closed When the object is destroyed. After calling | 
|  | // this method, the DecodedMessage object should not be used anymore. | 
|  | void ReleasePrimaryObject() { ResetBytes(); } | 
|  | }; | 
|  |  | 
|  | private: | 
|  | void _InitHeader(); | 
|  | }; | 
|  | struct SendAndReceiveResponse final { | 
|  | FIDL_ALIGNDECL | 
|  | fidl_message_header_t _hdr; | 
|  | ::llcpp::fidl::test::emptystruct::wire::Empty e; | 
|  | explicit SendAndReceiveResponse( | 
|  | ::llcpp::fidl::test::emptystruct::wire::Empty& e) | 
|  | : e(std::move(e)) { | 
|  | _InitHeader(); | 
|  | } | 
|  | SendAndReceiveResponse() { _InitHeader(); } | 
|  |  | 
|  | static constexpr const fidl_type_t* Type = | 
|  | &::llcpp::fidl::test::emptystruct:: | 
|  | fidl_test_emptystruct_EmptyProtocolSendAndReceiveResponseTable; | 
|  | static constexpr uint32_t MaxNumHandles = 0; | 
|  | static constexpr uint32_t PrimarySize = 24; | 
|  | static constexpr uint32_t MaxOutOfLine = 0; | 
|  | static constexpr bool HasFlexibleEnvelope = false; | 
|  | static constexpr bool HasPointer = false; | 
|  | static constexpr ::fidl::internal::TransactionalMessageKind MessageKind = | 
|  | ::fidl::internal::TransactionalMessageKind::kResponse; | 
|  |  | 
|  | private: | 
|  | class UnownedEncodedByteMessage final { | 
|  | public: | 
|  | UnownedEncodedByteMessage( | 
|  | uint8_t* _bytes, uint32_t _byte_size, | 
|  | ::llcpp::fidl::test::emptystruct::wire::Empty& e) | 
|  | : message_(_bytes, _byte_size, sizeof(SendAndReceiveResponse), | 
|  | nullptr, 0, 0) { | 
|  | FIDL_ALIGNDECL SendAndReceiveResponse _response{e}; | 
|  | message_.Encode<SendAndReceiveResponse>(&_response); | 
|  | } | 
|  | UnownedEncodedByteMessage(uint8_t* bytes, uint32_t byte_size, | 
|  | SendAndReceiveResponse* response) | 
|  | : message_(bytes, byte_size, sizeof(SendAndReceiveResponse), nullptr, | 
|  | 0, 0) { | 
|  | message_.Encode<SendAndReceiveResponse>(response); | 
|  | } | 
|  | UnownedEncodedByteMessage(const UnownedEncodedByteMessage&) = delete; | 
|  | UnownedEncodedByteMessage(UnownedEncodedByteMessage&&) = delete; | 
|  | UnownedEncodedByteMessage* operator=(const UnownedEncodedByteMessage&) = | 
|  | delete; | 
|  | UnownedEncodedByteMessage* operator=(UnownedEncodedByteMessage&&) = | 
|  | delete; | 
|  |  | 
|  | zx_status_t status() const { return message_.status(); } | 
|  | #ifdef __Fuchsia__ | 
|  | const char* status_string() const { return message_.status_string(); } | 
|  | #endif | 
|  | bool ok() const { return message_.status() == ZX_OK; } | 
|  | const char* error() const { return message_.error(); } | 
|  |  | 
|  | ::fidl::OutgoingByteMessage& GetOutgoingMessage() { return message_; } | 
|  |  | 
|  | #ifdef __Fuchsia__ | 
|  | template <typename ChannelLike> | 
|  | void Write(ChannelLike&& client) { | 
|  | message_.Write(std::forward<ChannelLike>(client)); | 
|  | } | 
|  | #endif | 
|  |  | 
|  | private: | 
|  | ::fidl::OutgoingByteMessage message_; | 
|  | }; | 
|  |  | 
|  | class UnownedEncodedIovecMessage final { | 
|  | public: | 
|  | UnownedEncodedIovecMessage( | 
|  | zx_channel_iovec_t* iovecs, uint32_t iovec_size, | 
|  | fidl_iovec_substitution_t* substitutions, uint32_t substitutions_size, | 
|  | ::llcpp::fidl::test::emptystruct::wire::Empty& e) | 
|  | : message_(::fidl::OutgoingIovecMessage::constructor_args{ | 
|  | .iovecs = iovecs, | 
|  | .iovecs_actual = 0, | 
|  | .iovecs_capacity = iovec_size, | 
|  | .substitutions = substitutions, | 
|  | .substitutions_actual = 0, | 
|  | .substitutions_capacity = substitutions_size, | 
|  | .handles = nullptr, | 
|  | .handle_actual = 0, | 
|  | .handle_capacity = 0, | 
|  | }) { | 
|  | FIDL_ALIGNDECL SendAndReceiveResponse _response{e}; | 
|  | message_.Encode<SendAndReceiveResponse>(&_response); | 
|  | } | 
|  | UnownedEncodedIovecMessage(zx_channel_iovec_t* iovecs, | 
|  | uint32_t iovec_size, | 
|  | fidl_iovec_substitution_t* substitutions, | 
|  | uint32_t substitutions_size, | 
|  | SendAndReceiveResponse* response) | 
|  | : message_(::fidl::OutgoingIovecMessage::constructor_args{ | 
|  | .iovecs = iovecs, | 
|  | .iovecs_actual = 0, | 
|  | .iovecs_capacity = iovec_size, | 
|  | .substitutions = substitutions, | 
|  | .substitutions_actual = 0, | 
|  | .substitutions_capacity = substitutions_size, | 
|  | .handles = nullptr, | 
|  | .handle_actual = 0, | 
|  | .handle_capacity = 0, | 
|  | }) { | 
|  | message_.Encode<SendAndReceiveResponse>(response); | 
|  | } | 
|  | UnownedEncodedIovecMessage(const UnownedEncodedIovecMessage&) = delete; | 
|  | UnownedEncodedIovecMessage(UnownedEncodedIovecMessage&&) = delete; | 
|  | UnownedEncodedIovecMessage* operator=(const UnownedEncodedIovecMessage&) = | 
|  | delete; | 
|  | UnownedEncodedIovecMessage* operator=(UnownedEncodedIovecMessage&&) = | 
|  | delete; | 
|  |  | 
|  | zx_status_t status() const { return message_.status(); } | 
|  | #ifdef __Fuchsia__ | 
|  | const char* status_string() const { return message_.status_string(); } | 
|  | #endif | 
|  | bool ok() const { return message_.status() == ZX_OK; } | 
|  | const char* error() const { return message_.error(); } | 
|  |  | 
|  | ::fidl::OutgoingIovecMessage& GetOutgoingMessage() { return message_; } | 
|  |  | 
|  | #ifdef __Fuchsia__ | 
|  | template <typename ChannelLike> | 
|  | void Write(ChannelLike&& client) { | 
|  | message_.Write(std::forward<ChannelLike>(client)); | 
|  | } | 
|  | #endif | 
|  |  | 
|  | private: | 
|  | ::fidl::OutgoingIovecMessage message_; | 
|  | }; | 
|  |  | 
|  | class OwnedEncodedByteMessage final { | 
|  | public: | 
|  | explicit OwnedEncodedByteMessage( | 
|  | ::llcpp::fidl::test::emptystruct::wire::Empty& e) | 
|  | : message_(bytes_, sizeof(bytes_), e) {} | 
|  | explicit OwnedEncodedByteMessage(SendAndReceiveResponse* response) | 
|  | : message_(bytes_, sizeof(bytes_), response) {} | 
|  | OwnedEncodedByteMessage(const OwnedEncodedByteMessage&) = delete; | 
|  | OwnedEncodedByteMessage(OwnedEncodedByteMessage&&) = delete; | 
|  | OwnedEncodedByteMessage* operator=(const OwnedEncodedByteMessage&) = | 
|  | delete; | 
|  | OwnedEncodedByteMessage* operator=(OwnedEncodedByteMessage&&) = delete; | 
|  |  | 
|  | zx_status_t status() const { return message_.status(); } | 
|  | #ifdef __Fuchsia__ | 
|  | const char* status_string() const { return message_.status_string(); } | 
|  | #endif | 
|  | bool ok() const { return message_.ok(); } | 
|  | const char* error() const { return message_.error(); } | 
|  |  | 
|  | ::fidl::OutgoingByteMessage& GetOutgoingMessage() { | 
|  | return message_.GetOutgoingMessage(); | 
|  | } | 
|  |  | 
|  | #ifdef __Fuchsia__ | 
|  | template <typename ChannelLike> | 
|  | void Write(ChannelLike&& client) { | 
|  | message_.Write(std::forward<ChannelLike>(client)); | 
|  | } | 
|  | #endif | 
|  |  | 
|  | private: | 
|  | FIDL_ALIGNDECL | 
|  | uint8_t bytes_[PrimarySize + MaxOutOfLine]; | 
|  | UnownedEncodedByteMessage message_; | 
|  | }; | 
|  |  | 
|  | class OwnedEncodedIovecMessage final { | 
|  | public: | 
|  | explicit OwnedEncodedIovecMessage( | 
|  | ::llcpp::fidl::test::emptystruct::wire::Empty& e) | 
|  | : message_(iovecs_, ::fidl::internal::kIovecBufferSize, | 
|  | substitutions_, ::fidl::internal::kIovecBufferSize, e) {} | 
|  | explicit OwnedEncodedIovecMessage(SendAndReceiveResponse* response) | 
|  | : message_(iovecs_, ::fidl::internal::kIovecBufferSize, | 
|  | substitutions_, ::fidl::internal::kIovecBufferSize, | 
|  | response) {} | 
|  | OwnedEncodedIovecMessage(const OwnedEncodedIovecMessage&) = delete; | 
|  | OwnedEncodedIovecMessage(OwnedEncodedIovecMessage&&) = delete; | 
|  | OwnedEncodedIovecMessage* operator=(const OwnedEncodedIovecMessage&) = | 
|  | delete; | 
|  | OwnedEncodedIovecMessage* operator=(OwnedEncodedIovecMessage&&) = delete; | 
|  |  | 
|  | zx_status_t status() const { return message_.status(); } | 
|  | #ifdef __Fuchsia__ | 
|  | const char* status_string() const { return message_.status_string(); } | 
|  | #endif | 
|  | bool ok() const { return message_.ok(); } | 
|  | const char* error() const { return message_.error(); } | 
|  |  | 
|  | ::fidl::OutgoingIovecMessage& GetOutgoingMessage() { | 
|  | return message_.GetOutgoingMessage(); | 
|  | } | 
|  |  | 
|  | #ifdef __Fuchsia__ | 
|  | template <typename ChannelLike> | 
|  | void Write(ChannelLike&& client) { | 
|  | message_.Write(std::forward<ChannelLike>(client)); | 
|  | } | 
|  | #endif | 
|  |  | 
|  | private: | 
|  | zx_channel_iovec_t iovecs_[::fidl::internal::kIovecBufferSize]; | 
|  | fidl_iovec_substitution_t | 
|  | substitutions_[::fidl::internal::kIovecBufferSize]; | 
|  | UnownedEncodedIovecMessage message_; | 
|  | }; | 
|  |  | 
|  | public: | 
|  | friend ::fidl::internal::EncodedMessageTypes<SendAndReceiveResponse>; | 
|  | using OwnedEncodedMessage = OwnedEncodedByteMessage; | 
|  | using UnownedEncodedMessage = UnownedEncodedByteMessage; | 
|  |  | 
|  | class DecodedMessage final : public ::fidl::internal::IncomingMessage { | 
|  | public: | 
|  | DecodedMessage(uint8_t* bytes, uint32_t byte_actual, | 
|  | zx_handle_info_t* handles = nullptr, | 
|  | uint32_t handle_actual = 0) | 
|  | : ::fidl::internal::IncomingMessage(bytes, byte_actual, handles, | 
|  | handle_actual) { | 
|  | Decode<SendAndReceiveResponse>(); | 
|  | } | 
|  | DecodedMessage(fidl_incoming_msg_t* msg) | 
|  | : ::fidl::internal::IncomingMessage(msg) { | 
|  | Decode<SendAndReceiveResponse>(); | 
|  | } | 
|  | DecodedMessage(const DecodedMessage&) = delete; | 
|  | DecodedMessage(DecodedMessage&&) = delete; | 
|  | DecodedMessage* operator=(const DecodedMessage&) = delete; | 
|  | DecodedMessage* operator=(DecodedMessage&&) = delete; | 
|  |  | 
|  | SendAndReceiveResponse* PrimaryObject() { | 
|  | ZX_DEBUG_ASSERT(ok()); | 
|  | return reinterpret_cast<SendAndReceiveResponse*>(bytes()); | 
|  | } | 
|  |  | 
|  | // Release the ownership of the decoded message. That means that the | 
|  | // handles won't be closed When the object is destroyed. After calling | 
|  | // this method, the DecodedMessage object should not be used anymore. | 
|  | void ReleasePrimaryObject() { ResetBytes(); } | 
|  | }; | 
|  |  | 
|  | private: | 
|  | void _InitHeader(); | 
|  | }; | 
|  | struct SendAndReceiveRequest final { | 
|  | FIDL_ALIGNDECL | 
|  | fidl_message_header_t _hdr; | 
|  | ::llcpp::fidl::test::emptystruct::wire::Empty e; | 
|  | explicit SendAndReceiveRequest( | 
|  | zx_txid_t _txid, ::llcpp::fidl::test::emptystruct::wire::Empty& e) | 
|  | : e(std::move(e)) { | 
|  | _InitHeader(_txid); | 
|  | } | 
|  | explicit SendAndReceiveRequest(zx_txid_t _txid) { _InitHeader(_txid); } | 
|  |  | 
|  | static constexpr const fidl_type_t* Type = | 
|  | &::llcpp::fidl::test::emptystruct:: | 
|  | fidl_test_emptystruct_EmptyProtocolSendAndReceiveRequestTable; | 
|  | static constexpr uint32_t MaxNumHandles = 0; | 
|  | static constexpr uint32_t PrimarySize = 24; | 
|  | static constexpr uint32_t MaxOutOfLine = 0; | 
|  | static constexpr uint32_t AltPrimarySize = 24; | 
|  | static constexpr uint32_t AltMaxOutOfLine = 0; | 
|  | static constexpr bool HasFlexibleEnvelope = false; | 
|  | static constexpr bool HasPointer = false; | 
|  | static constexpr ::fidl::internal::TransactionalMessageKind MessageKind = | 
|  | ::fidl::internal::TransactionalMessageKind::kRequest; | 
|  | using ResponseType = SendAndReceiveResponse; | 
|  |  | 
|  | private: | 
|  | class UnownedEncodedByteMessage final { | 
|  | public: | 
|  | UnownedEncodedByteMessage( | 
|  | uint8_t* _bytes, uint32_t _byte_size, zx_txid_t _txid, | 
|  | ::llcpp::fidl::test::emptystruct::wire::Empty& e) | 
|  | : message_(_bytes, _byte_size, sizeof(SendAndReceiveRequest), nullptr, | 
|  | 0, 0) { | 
|  | FIDL_ALIGNDECL SendAndReceiveRequest _request(_txid, e); | 
|  | message_.Encode<SendAndReceiveRequest>(&_request); | 
|  | } | 
|  | UnownedEncodedByteMessage(uint8_t* bytes, uint32_t byte_size, | 
|  | SendAndReceiveRequest* request) | 
|  | : message_(bytes, byte_size, sizeof(SendAndReceiveRequest), nullptr, | 
|  | 0, 0) { | 
|  | message_.Encode<SendAndReceiveRequest>(request); | 
|  | } | 
|  | UnownedEncodedByteMessage(const UnownedEncodedByteMessage&) = delete; | 
|  | UnownedEncodedByteMessage(UnownedEncodedByteMessage&&) = delete; | 
|  | UnownedEncodedByteMessage* operator=(const UnownedEncodedByteMessage&) = | 
|  | delete; | 
|  | UnownedEncodedByteMessage* operator=(UnownedEncodedByteMessage&&) = | 
|  | delete; | 
|  |  | 
|  | zx_status_t status() const { return message_.status(); } | 
|  | #ifdef __Fuchsia__ | 
|  | const char* status_string() const { return message_.status_string(); } | 
|  | #endif | 
|  | bool ok() const { return message_.status() == ZX_OK; } | 
|  | const char* error() const { return message_.error(); } | 
|  |  | 
|  | ::fidl::OutgoingByteMessage& GetOutgoingMessage() { return message_; } | 
|  |  | 
|  | #ifdef __Fuchsia__ | 
|  | template <typename ChannelLike> | 
|  | void Write(ChannelLike&& client) { | 
|  | message_.Write(std::forward<ChannelLike>(client)); | 
|  | } | 
|  | #endif | 
|  |  | 
|  | private: | 
|  | ::fidl::OutgoingByteMessage message_; | 
|  | }; | 
|  |  | 
|  | class UnownedEncodedIovecMessage final { | 
|  | public: | 
|  | UnownedEncodedIovecMessage( | 
|  | zx_channel_iovec_t* iovecs, uint32_t iovec_size, | 
|  | fidl_iovec_substitution_t* substitutions, uint32_t substitutions_size, | 
|  | zx_txid_t _txid, ::llcpp::fidl::test::emptystruct::wire::Empty& e) | 
|  | : message_(::fidl::OutgoingIovecMessage::constructor_args{ | 
|  | .iovecs = iovecs, | 
|  | .iovecs_actual = 0, | 
|  | .iovecs_capacity = iovec_size, | 
|  | .substitutions = substitutions, | 
|  | .substitutions_actual = 0, | 
|  | .substitutions_capacity = substitutions_size, | 
|  | .handles = nullptr, | 
|  | .handle_actual = 0, | 
|  | .handle_capacity = 0, | 
|  | }) { | 
|  | FIDL_ALIGNDECL SendAndReceiveRequest _request(_txid, e); | 
|  | message_.Encode<SendAndReceiveRequest>(&_request); | 
|  | } | 
|  | UnownedEncodedIovecMessage(zx_channel_iovec_t* iovecs, | 
|  | uint32_t iovec_size, | 
|  | fidl_iovec_substitution_t* substitutions, | 
|  | uint32_t substitutions_size, | 
|  | SendAndReceiveRequest* request) | 
|  | : message_(::fidl::OutgoingIovecMessage::constructor_args{ | 
|  | .iovecs = iovecs, | 
|  | .iovecs_actual = 0, | 
|  | .iovecs_capacity = iovec_size, | 
|  | .substitutions = substitutions, | 
|  | .substitutions_actual = 0, | 
|  | .substitutions_capacity = substitutions_size, | 
|  | .handles = nullptr, | 
|  | .handle_actual = 0, | 
|  | .handle_capacity = 0, | 
|  | }) { | 
|  | message_.Encode<SendAndReceiveRequest>(request); | 
|  | } | 
|  | UnownedEncodedIovecMessage(const UnownedEncodedIovecMessage&) = delete; | 
|  | UnownedEncodedIovecMessage(UnownedEncodedIovecMessage&&) = delete; | 
|  | UnownedEncodedIovecMessage* operator=(const UnownedEncodedIovecMessage&) = | 
|  | delete; | 
|  | UnownedEncodedIovecMessage* operator=(UnownedEncodedIovecMessage&&) = | 
|  | delete; | 
|  |  | 
|  | zx_status_t status() const { return message_.status(); } | 
|  | #ifdef __Fuchsia__ | 
|  | const char* status_string() const { return message_.status_string(); } | 
|  | #endif | 
|  | bool ok() const { return message_.status() == ZX_OK; } | 
|  | const char* error() const { return message_.error(); } | 
|  |  | 
|  | ::fidl::OutgoingIovecMessage& GetOutgoingMessage() { return message_; } | 
|  |  | 
|  | #ifdef __Fuchsia__ | 
|  | template <typename ChannelLike> | 
|  | void Write(ChannelLike&& client) { | 
|  | message_.Write(std::forward<ChannelLike>(client)); | 
|  | } | 
|  | #endif | 
|  |  | 
|  | private: | 
|  | ::fidl::OutgoingIovecMessage message_; | 
|  | }; | 
|  |  | 
|  | class OwnedEncodedByteMessage final { | 
|  | public: | 
|  | explicit OwnedEncodedByteMessage( | 
|  | zx_txid_t _txid, ::llcpp::fidl::test::emptystruct::wire::Empty& e) | 
|  | : message_(bytes_, sizeof(bytes_), _txid, e) {} | 
|  | explicit OwnedEncodedByteMessage(SendAndReceiveRequest* request) | 
|  | : message_(bytes_, sizeof(bytes_), request) {} | 
|  | OwnedEncodedByteMessage(const OwnedEncodedByteMessage&) = delete; | 
|  | OwnedEncodedByteMessage(OwnedEncodedByteMessage&&) = delete; | 
|  | OwnedEncodedByteMessage* operator=(const OwnedEncodedByteMessage&) = | 
|  | delete; | 
|  | OwnedEncodedByteMessage* operator=(OwnedEncodedByteMessage&&) = delete; | 
|  |  | 
|  | zx_status_t status() const { return message_.status(); } | 
|  | #ifdef __Fuchsia__ | 
|  | const char* status_string() const { return message_.status_string(); } | 
|  | #endif | 
|  | bool ok() const { return message_.ok(); } | 
|  | const char* error() const { return message_.error(); } | 
|  |  | 
|  | ::fidl::OutgoingByteMessage& GetOutgoingMessage() { | 
|  | return message_.GetOutgoingMessage(); | 
|  | } | 
|  |  | 
|  | #ifdef __Fuchsia__ | 
|  | template <typename ChannelLike> | 
|  | void Write(ChannelLike&& client) { | 
|  | message_.Write(std::forward<ChannelLike>(client)); | 
|  | } | 
|  | #endif | 
|  |  | 
|  | private: | 
|  | FIDL_ALIGNDECL | 
|  | uint8_t bytes_[PrimarySize + MaxOutOfLine]; | 
|  | UnownedEncodedByteMessage message_; | 
|  | }; | 
|  |  | 
|  | class OwnedEncodedIovecMessage final { | 
|  | public: | 
|  | explicit OwnedEncodedIovecMessage( | 
|  | zx_txid_t _txid, ::llcpp::fidl::test::emptystruct::wire::Empty& e) | 
|  | : message_(iovecs_, ::fidl::internal::kIovecBufferSize, | 
|  | substitutions_, ::fidl::internal::kIovecBufferSize, _txid, | 
|  | e) {} | 
|  | explicit OwnedEncodedIovecMessage(SendAndReceiveRequest* request) | 
|  | : message_(iovecs_, ::fidl::internal::kIovecBufferSize, | 
|  | substitutions_, ::fidl::internal::kIovecBufferSize, | 
|  | request) {} | 
|  | OwnedEncodedIovecMessage(const OwnedEncodedIovecMessage&) = delete; | 
|  | OwnedEncodedIovecMessage(OwnedEncodedIovecMessage&&) = delete; | 
|  | OwnedEncodedIovecMessage* operator=(const OwnedEncodedIovecMessage&) = | 
|  | delete; | 
|  | OwnedEncodedIovecMessage* operator=(OwnedEncodedIovecMessage&&) = delete; | 
|  |  | 
|  | zx_status_t status() const { return message_.status(); } | 
|  | #ifdef __Fuchsia__ | 
|  | const char* status_string() const { return message_.status_string(); } | 
|  | #endif | 
|  | bool ok() const { return message_.ok(); } | 
|  | const char* error() const { return message_.error(); } | 
|  |  | 
|  | ::fidl::OutgoingIovecMessage& GetOutgoingMessage() { | 
|  | return message_.GetOutgoingMessage(); | 
|  | } | 
|  |  | 
|  | #ifdef __Fuchsia__ | 
|  | template <typename ChannelLike> | 
|  | void Write(ChannelLike&& client) { | 
|  | message_.Write(std::forward<ChannelLike>(client)); | 
|  | } | 
|  | #endif | 
|  |  | 
|  | private: | 
|  | zx_channel_iovec_t iovecs_[::fidl::internal::kIovecBufferSize]; | 
|  | fidl_iovec_substitution_t | 
|  | substitutions_[::fidl::internal::kIovecBufferSize]; | 
|  | UnownedEncodedIovecMessage message_; | 
|  | }; | 
|  |  | 
|  | public: | 
|  | friend ::fidl::internal::EncodedMessageTypes<SendAndReceiveRequest>; | 
|  | using OwnedEncodedMessage = OwnedEncodedByteMessage; | 
|  | using UnownedEncodedMessage = UnownedEncodedByteMessage; | 
|  |  | 
|  | class DecodedMessage final : public ::fidl::internal::IncomingMessage { | 
|  | public: | 
|  | DecodedMessage(uint8_t* bytes, uint32_t byte_actual, | 
|  | zx_handle_info_t* handles = nullptr, | 
|  | uint32_t handle_actual = 0) | 
|  | : ::fidl::internal::IncomingMessage(bytes, byte_actual, handles, | 
|  | handle_actual) { | 
|  | Decode<SendAndReceiveRequest>(); | 
|  | } | 
|  | DecodedMessage(fidl_incoming_msg_t* msg) | 
|  | : ::fidl::internal::IncomingMessage(msg) { | 
|  | Decode<SendAndReceiveRequest>(); | 
|  | } | 
|  | DecodedMessage(const DecodedMessage&) = delete; | 
|  | DecodedMessage(DecodedMessage&&) = delete; | 
|  | DecodedMessage* operator=(const DecodedMessage&) = delete; | 
|  | DecodedMessage* operator=(DecodedMessage&&) = delete; | 
|  |  | 
|  | SendAndReceiveRequest* PrimaryObject() { | 
|  | ZX_DEBUG_ASSERT(ok()); | 
|  | return reinterpret_cast<SendAndReceiveRequest*>(bytes()); | 
|  | } | 
|  |  | 
|  | // Release the ownership of the decoded message. That means that the | 
|  | // handles won't be closed When the object is destroyed. After calling | 
|  | // this method, the DecodedMessage object should not be used anymore. | 
|  | void ReleasePrimaryObject() { ResetBytes(); } | 
|  | }; | 
|  |  | 
|  | private: | 
|  | void _InitHeader(zx_txid_t _txid); | 
|  | }; | 
|  |  | 
|  | class EventHandlerInterface { | 
|  | public: | 
|  | EventHandlerInterface() = default; | 
|  | virtual ~EventHandlerInterface() = default; | 
|  | virtual void Receive(ReceiveResponse* event) {} | 
|  | }; | 
|  |  | 
|  | class SyncEventHandler : public EventHandlerInterface { | 
|  | public: | 
|  | SyncEventHandler() = default; | 
|  |  | 
|  | // Method called when an unknown event is found. This methods gives the | 
|  | // status which, in this case, is returned by HandleOneEvent. | 
|  | virtual zx_status_t Unknown() = 0; | 
|  |  | 
|  | // Handle all possible events defined in this protocol. | 
|  | // Blocks to consume exactly one message from the channel, then call the | 
|  | // corresponding virtual method. | 
|  | ::fidl::Result HandleOneEvent( | 
|  | ::fidl::UnownedClientEnd< | 
|  | ::llcpp::fidl::test::emptystruct::EmptyProtocol> | 
|  | client_end); | 
|  | }; | 
|  |  | 
|  | #ifdef __Fuchsia__ | 
|  | // Collection of return types of FIDL calls in this protocol. | 
|  | class ResultOf final { | 
|  | ResultOf() = delete; | 
|  |  | 
|  | public: | 
|  | class Send final : public ::fidl::Result { | 
|  | public: | 
|  | explicit Send(::fidl::UnownedClientEnd< | 
|  | ::llcpp::fidl::test::emptystruct::EmptyProtocol> | 
|  | _client, | 
|  | ::llcpp::fidl::test::emptystruct::wire::Empty& e); | 
|  | explicit Send(const ::fidl::Result& result) : ::fidl::Result(result) {} | 
|  | Send(Send&&) = delete; | 
|  | Send(const Send&) = delete; | 
|  | Send* operator=(Send&&) = delete; | 
|  | Send* operator=(const Send&) = delete; | 
|  | ~Send() = default; | 
|  |  | 
|  | private: | 
|  | }; | 
|  | class SendAndReceive final : public ::fidl::Result { | 
|  | public: | 
|  | explicit SendAndReceive( | 
|  | ::fidl::UnownedClientEnd< | 
|  | ::llcpp::fidl::test::emptystruct::EmptyProtocol> | 
|  | _client, | 
|  | ::llcpp::fidl::test::emptystruct::wire::Empty& e); | 
|  | SendAndReceive(::fidl::UnownedClientEnd< | 
|  | ::llcpp::fidl::test::emptystruct::EmptyProtocol> | 
|  | _client, | 
|  | ::llcpp::fidl::test::emptystruct::wire::Empty& e, | 
|  | zx_time_t _deadline); | 
|  | explicit SendAndReceive(const ::fidl::Result& result) | 
|  | : ::fidl::Result(result) {} | 
|  | SendAndReceive(SendAndReceive&&) = delete; | 
|  | SendAndReceive(const SendAndReceive&) = delete; | 
|  | SendAndReceive* operator=(SendAndReceive&&) = delete; | 
|  | SendAndReceive* operator=(const SendAndReceive&) = delete; | 
|  | ~SendAndReceive() = default; | 
|  |  | 
|  | SendAndReceiveResponse* Unwrap() { | 
|  | ZX_DEBUG_ASSERT(ok()); | 
|  | return reinterpret_cast<SendAndReceiveResponse*>(bytes_); | 
|  | } | 
|  | const SendAndReceiveResponse* Unwrap() const { | 
|  | ZX_DEBUG_ASSERT(ok()); | 
|  | return reinterpret_cast<const SendAndReceiveResponse*>(bytes_); | 
|  | } | 
|  |  | 
|  | SendAndReceiveResponse& value() { return *Unwrap(); } | 
|  | const SendAndReceiveResponse& value() const { return *Unwrap(); } | 
|  |  | 
|  | SendAndReceiveResponse* operator->() { return &value(); } | 
|  | const SendAndReceiveResponse* operator->() const { return &value(); } | 
|  |  | 
|  | SendAndReceiveResponse& operator*() { return value(); } | 
|  | const SendAndReceiveResponse& operator*() const { return value(); } | 
|  |  | 
|  | private: | 
|  | FIDL_ALIGNDECL | 
|  | uint8_t bytes_[SendAndReceiveResponse::PrimarySize + | 
|  | SendAndReceiveResponse::MaxOutOfLine]; | 
|  | }; | 
|  | }; | 
|  |  | 
|  | // Collection of return types of FIDL calls in this protocol, | 
|  | // when the caller-allocate flavor or in-place call is used. | 
|  | class UnownedResultOf final { | 
|  | UnownedResultOf() = delete; | 
|  |  | 
|  | public: | 
|  | class Send final : public ::fidl::Result { | 
|  | public: | 
|  | explicit Send(::fidl::UnownedClientEnd< | 
|  | ::llcpp::fidl::test::emptystruct::EmptyProtocol> | 
|  | _client, | 
|  | uint8_t* _request_bytes, uint32_t _request_byte_capacity, | 
|  | ::llcpp::fidl::test::emptystruct::wire::Empty& e); | 
|  | explicit Send(const ::fidl::Result& result) : ::fidl::Result(result) {} | 
|  | Send(Send&&) = delete; | 
|  | Send(const Send&) = delete; | 
|  | Send* operator=(Send&&) = delete; | 
|  | Send* operator=(const Send&) = delete; | 
|  | ~Send() = default; | 
|  | }; | 
|  | class SendAndReceive final : public ::fidl::Result { | 
|  | public: | 
|  | explicit SendAndReceive( | 
|  | ::fidl::UnownedClientEnd< | 
|  | ::llcpp::fidl::test::emptystruct::EmptyProtocol> | 
|  | _client, | 
|  | uint8_t* _request_bytes, uint32_t _request_byte_capacity, | 
|  | ::llcpp::fidl::test::emptystruct::wire::Empty& e, | 
|  | uint8_t* _response_bytes, uint32_t _response_byte_capacity); | 
|  | explicit SendAndReceive(const ::fidl::Result& result) | 
|  | : ::fidl::Result(result) {} | 
|  | SendAndReceive(SendAndReceive&&) = delete; | 
|  | SendAndReceive(const SendAndReceive&) = delete; | 
|  | SendAndReceive* operator=(SendAndReceive&&) = delete; | 
|  | SendAndReceive* operator=(const SendAndReceive&) = delete; | 
|  | ~SendAndReceive() = default; | 
|  |  | 
|  | SendAndReceiveResponse* Unwrap() { | 
|  | ZX_DEBUG_ASSERT(ok()); | 
|  | return reinterpret_cast<SendAndReceiveResponse*>(bytes_); | 
|  | } | 
|  | const SendAndReceiveResponse* Unwrap() const { | 
|  | ZX_DEBUG_ASSERT(ok()); | 
|  | return reinterpret_cast<const SendAndReceiveResponse*>(bytes_); | 
|  | } | 
|  |  | 
|  | SendAndReceiveResponse& value() { return *Unwrap(); } | 
|  | const SendAndReceiveResponse& value() const { return *Unwrap(); } | 
|  |  | 
|  | SendAndReceiveResponse* operator->() { return &value(); } | 
|  | const SendAndReceiveResponse* operator->() const { return &value(); } | 
|  |  | 
|  | SendAndReceiveResponse& operator*() { return value(); } | 
|  | const SendAndReceiveResponse& operator*() const { return value(); } | 
|  |  | 
|  | private: | 
|  | uint8_t* bytes_; | 
|  | }; | 
|  | }; | 
|  |  | 
|  | // Methods to make a sync FIDL call directly on an unowned channel or a | 
|  | // const reference to a | 
|  | // |fidl::ClientEnd<::llcpp::fidl::test::emptystruct::EmptyProtocol>|, | 
|  | // avoiding setting up a client. | 
|  | class Call final { | 
|  | Call() = delete; | 
|  |  | 
|  | public: | 
|  | // Allocates 24 bytes of message buffer on the stack. No heap allocation | 
|  | // necessary. | 
|  | static ResultOf::Send Send( | 
|  | ::fidl::UnownedClientEnd< | 
|  | ::llcpp::fidl::test::emptystruct::EmptyProtocol> | 
|  | _client_end, | 
|  | ::llcpp::fidl::test::emptystruct::wire::Empty e) { | 
|  | return ResultOf::Send(_client_end, e); | 
|  | } | 
|  |  | 
|  | // Caller provides the backing storage for FIDL message via request and | 
|  | // response buffers. | 
|  | static UnownedResultOf::Send Send( | 
|  | ::fidl::UnownedClientEnd< | 
|  | ::llcpp::fidl::test::emptystruct::EmptyProtocol> | 
|  | _client_end, | 
|  | ::fidl::BufferSpan _request_buffer, | 
|  | ::llcpp::fidl::test::emptystruct::wire::Empty e) { | 
|  | return UnownedResultOf::Send(_client_end, _request_buffer.data, | 
|  | _request_buffer.capacity, e); | 
|  | } | 
|  |  | 
|  | // Allocates 48 bytes of message buffer on the stack. No heap allocation | 
|  | // necessary. | 
|  | static ResultOf::SendAndReceive SendAndReceive( | 
|  | ::fidl::UnownedClientEnd< | 
|  | ::llcpp::fidl::test::emptystruct::EmptyProtocol> | 
|  | _client_end, | 
|  | ::llcpp::fidl::test::emptystruct::wire::Empty e) { | 
|  | return ResultOf::SendAndReceive(_client_end, e); | 
|  | } | 
|  |  | 
|  | // Caller provides the backing storage for FIDL message via request and | 
|  | // response buffers. | 
|  | static UnownedResultOf::SendAndReceive SendAndReceive( | 
|  | ::fidl::UnownedClientEnd< | 
|  | ::llcpp::fidl::test::emptystruct::EmptyProtocol> | 
|  | _client_end, | 
|  | ::fidl::BufferSpan _request_buffer, | 
|  | ::llcpp::fidl::test::emptystruct::wire::Empty e, | 
|  | ::fidl::BufferSpan _response_buffer) { | 
|  | return UnownedResultOf::SendAndReceive( | 
|  | _client_end, _request_buffer.data, _request_buffer.capacity, e, | 
|  | _response_buffer.data, _response_buffer.capacity); | 
|  | } | 
|  | }; | 
|  |  | 
|  | class SyncClient final { | 
|  | public: | 
|  | SyncClient() = default; | 
|  |  | 
|  | explicit SyncClient(::fidl::ClientEnd<EmptyProtocol> client_end) | 
|  | : client_end_(std::move(client_end)) {} | 
|  |  | 
|  | ~SyncClient() = default; | 
|  | SyncClient(SyncClient&&) = default; | 
|  | SyncClient& operator=(SyncClient&&) = default; | 
|  |  | 
|  | const ::fidl::ClientEnd<EmptyProtocol>& client_end() const { | 
|  | return client_end_; | 
|  | } | 
|  | ::fidl::ClientEnd<EmptyProtocol>& client_end() { return client_end_; } | 
|  |  | 
|  | const ::zx::channel& channel() const { return client_end_.channel(); } | 
|  | ::zx::channel* mutable_channel() { return &client_end_.channel(); } | 
|  |  | 
|  | // Allocates 24 bytes of message buffer on the stack. No heap allocation | 
|  | // necessary. | 
|  | ResultOf::Send Send(::llcpp::fidl::test::emptystruct::wire::Empty e) { | 
|  | return ResultOf::Send(this->client_end(), e); | 
|  | } | 
|  |  | 
|  | // Caller provides the backing storage for FIDL message via request and | 
|  | // response buffers. | 
|  | UnownedResultOf::Send Send( | 
|  | ::fidl::BufferSpan _request_buffer, | 
|  | ::llcpp::fidl::test::emptystruct::wire::Empty e) { | 
|  | return UnownedResultOf::Send(this->client_end(), _request_buffer.data, | 
|  | _request_buffer.capacity, e); | 
|  | } | 
|  |  | 
|  | // Allocates 48 bytes of message buffer on the stack. No heap allocation | 
|  | // necessary. | 
|  | ResultOf::SendAndReceive SendAndReceive( | 
|  | ::llcpp::fidl::test::emptystruct::wire::Empty e) { | 
|  | return ResultOf::SendAndReceive(this->client_end(), e); | 
|  | } | 
|  |  | 
|  | // Caller provides the backing storage for FIDL message via request and | 
|  | // response buffers. | 
|  | UnownedResultOf::SendAndReceive SendAndReceive( | 
|  | ::fidl::BufferSpan _request_buffer, | 
|  | ::llcpp::fidl::test::emptystruct::wire::Empty e, | 
|  | ::fidl::BufferSpan _response_buffer) { | 
|  | return UnownedResultOf::SendAndReceive( | 
|  | this->client_end(), _request_buffer.data, _request_buffer.capacity, e, | 
|  | _response_buffer.data, _response_buffer.capacity); | 
|  | } | 
|  |  | 
|  | // Handle all possible events defined in this protocol. | 
|  | // Blocks to consume exactly one message from the channel, then call the | 
|  | // corresponding virtual method defined in |SyncEventHandler|. The return | 
|  | // status of the handler function is folded with any transport-level errors | 
|  | // and returned. | 
|  | ::fidl::Result HandleOneEvent(SyncEventHandler& event_handler) { | 
|  | return event_handler.HandleOneEvent(client_end_); | 
|  | } | 
|  |  | 
|  | private: | 
|  | ::fidl::ClientEnd<EmptyProtocol> client_end_; | 
|  | }; | 
|  |  | 
|  | #ifdef __Fuchsia__ | 
|  | class AsyncEventHandler; | 
|  | class SendAndReceiveResponseContext; | 
|  | class ClientImpl; | 
|  | #endif | 
|  |  | 
|  | // Pure-virtual interface to be implemented by a server. | 
|  | // This interface uses typed channels (i.e. |fidl::ClientEnd<SomeProtocol>| | 
|  | // and |fidl::ServerEnd<SomeProtocol>|). | 
|  | class Interface : public ::fidl::internal::IncomingMessageDispatcher { | 
|  | public: | 
|  | Interface() = default; | 
|  | virtual ~Interface() = default; | 
|  |  | 
|  | // The marker protocol type within which this |Interface| class is defined. | 
|  | using _EnclosingProtocol = EmptyProtocol; | 
|  |  | 
|  | using SendCompleter = ::fidl::Completer<>; | 
|  |  | 
|  | virtual void Send(::llcpp::fidl::test::emptystruct::wire::Empty e, | 
|  | SendCompleter::Sync& _completer) = 0; | 
|  |  | 
|  | class SendAndReceiveCompleterBase : public ::fidl::CompleterBase { | 
|  | public: | 
|  | // In the following methods, the return value indicates internal errors | 
|  | // during the reply, such as encoding or writing to the transport. Note | 
|  | // that any error will automatically lead to the destruction of the | 
|  | // binding, after which the |on_unbound| callback will be triggered with a | 
|  | // detailed reason. | 
|  | // | 
|  | // See //zircon/system/ulib/fidl/include/lib/fidl/llcpp/server.h. | 
|  | // | 
|  | // Because the reply status is identical to the unbinding status, it can | 
|  | // be safely ignored. | 
|  | ::fidl::Result Reply(::llcpp::fidl::test::emptystruct::wire::Empty e); | 
|  | ::fidl::Result Reply(::fidl::BufferSpan _buffer, | 
|  | ::llcpp::fidl::test::emptystruct::wire::Empty e); | 
|  |  | 
|  | protected: | 
|  | using ::fidl::CompleterBase::CompleterBase; | 
|  | }; | 
|  |  | 
|  | using SendAndReceiveCompleter = | 
|  | ::fidl::Completer<SendAndReceiveCompleterBase>; | 
|  |  | 
|  | virtual void SendAndReceive(::llcpp::fidl::test::emptystruct::wire::Empty e, | 
|  | SendAndReceiveCompleter::Sync& _completer) = 0; | 
|  |  | 
|  | private: | 
|  | ::fidl::DispatchResult dispatch_message(fidl_incoming_msg_t* msg, | 
|  | ::fidl::Transaction* txn) final; | 
|  | }; | 
|  |  | 
|  | // Attempts to dispatch the incoming message to a handler function in the | 
|  | // server implementation. If there is no matching handler, it returns false, | 
|  | // leaving the message and transaction intact. In all other cases, it consumes | 
|  | // the message and returns true. It is possible to chain multiple TryDispatch | 
|  | // functions in this manner. | 
|  | static ::fidl::DispatchResult TryDispatch(Interface* impl, | 
|  | fidl_incoming_msg_t* msg, | 
|  | ::fidl::Transaction* txn); | 
|  |  | 
|  | // Dispatches the incoming message to one of the handlers functions in the | 
|  | // protocol. If there is no matching handler, it closes all the handles in | 
|  | // |msg| and closes the channel with a |ZX_ERR_NOT_SUPPORTED| epitaph, before | 
|  | // returning false. The message should then be discarded. | 
|  | static ::fidl::DispatchResult Dispatch(Interface* impl, | 
|  | fidl_incoming_msg_t* msg, | 
|  | ::fidl::Transaction* txn); | 
|  |  | 
|  | // Same as |Dispatch|, but takes a |void*| instead of |Interface*|. | 
|  | // Only used with |fidl::BindServer| to reduce template expansion. | 
|  | // Do not call this method manually. Use |Dispatch| instead. | 
|  | static ::fidl::DispatchResult TypeErasedDispatch(void* impl, | 
|  | fidl_incoming_msg_t* msg, | 
|  | ::fidl::Transaction* txn) { | 
|  | return Dispatch(static_cast<Interface*>(impl), msg, txn); | 
|  | } | 
|  |  | 
|  | #endif | 
|  |  | 
|  | class EventSender; | 
|  | class WeakEventSender; | 
|  | }; | 
|  |  | 
|  | }  // namespace emptystruct | 
|  | }  // namespace test | 
|  | }  // namespace fidl | 
|  | }  // namespace llcpp | 
|  | namespace fidl { | 
|  |  | 
|  | template <> | 
|  | struct IsFidlType<::llcpp::fidl::test::emptystruct::wire::Empty> | 
|  | : public std::true_type {}; | 
|  | template <> | 
|  | struct IsStruct<::llcpp::fidl::test::emptystruct::wire::Empty> | 
|  | : public std::true_type {}; | 
|  | static_assert( | 
|  | std::is_standard_layout_v<::llcpp::fidl::test::emptystruct::wire::Empty>); | 
|  | static_assert(offsetof(::llcpp::fidl::test::emptystruct::wire::Empty, | 
|  | __reserved) == 0); | 
|  | static_assert(sizeof(::llcpp::fidl::test::emptystruct::wire::Empty) == | 
|  | ::llcpp::fidl::test::emptystruct::wire::Empty::PrimarySize); | 
|  |  | 
|  | template <> | 
|  | struct IsFidlType<::llcpp::fidl::test::emptystruct::EmptyProtocol::SendRequest> | 
|  | : public std::true_type {}; | 
|  | template <> | 
|  | struct IsFidlMessage< | 
|  | ::llcpp::fidl::test::emptystruct::EmptyProtocol::SendRequest> | 
|  | : public std::true_type {}; | 
|  | static_assert( | 
|  | sizeof(::llcpp::fidl::test::emptystruct::EmptyProtocol::SendRequest) == | 
|  | ::llcpp::fidl::test::emptystruct::EmptyProtocol::SendRequest::PrimarySize); | 
|  | static_assert( | 
|  | offsetof(::llcpp::fidl::test::emptystruct::EmptyProtocol::SendRequest, e) == | 
|  | 16); | 
|  |  | 
|  | template <> | 
|  | struct IsFidlType< | 
|  | ::llcpp::fidl::test::emptystruct::EmptyProtocol::ReceiveResponse> | 
|  | : public std::true_type {}; | 
|  | template <> | 
|  | struct IsFidlMessage< | 
|  | ::llcpp::fidl::test::emptystruct::EmptyProtocol::ReceiveResponse> | 
|  | : public std::true_type {}; | 
|  | static_assert( | 
|  | sizeof(::llcpp::fidl::test::emptystruct::EmptyProtocol::ReceiveResponse) == | 
|  | ::llcpp::fidl::test::emptystruct::EmptyProtocol::ReceiveResponse:: | 
|  | PrimarySize); | 
|  | static_assert( | 
|  | offsetof(::llcpp::fidl::test::emptystruct::EmptyProtocol::ReceiveResponse, | 
|  | e) == 16); | 
|  |  | 
|  | template <> | 
|  | struct IsFidlType< | 
|  | ::llcpp::fidl::test::emptystruct::EmptyProtocol::SendAndReceiveRequest> | 
|  | : public std::true_type {}; | 
|  | template <> | 
|  | struct IsFidlMessage< | 
|  | ::llcpp::fidl::test::emptystruct::EmptyProtocol::SendAndReceiveRequest> | 
|  | : public std::true_type {}; | 
|  | static_assert(sizeof(::llcpp::fidl::test::emptystruct::EmptyProtocol:: | 
|  | SendAndReceiveRequest) == | 
|  | ::llcpp::fidl::test::emptystruct::EmptyProtocol:: | 
|  | SendAndReceiveRequest::PrimarySize); | 
|  | static_assert( | 
|  | offsetof( | 
|  | ::llcpp::fidl::test::emptystruct::EmptyProtocol::SendAndReceiveRequest, | 
|  | e) == 16); | 
|  |  | 
|  | template <> | 
|  | struct IsFidlType< | 
|  | ::llcpp::fidl::test::emptystruct::EmptyProtocol::SendAndReceiveResponse> | 
|  | : public std::true_type {}; | 
|  | template <> | 
|  | struct IsFidlMessage< | 
|  | ::llcpp::fidl::test::emptystruct::EmptyProtocol::SendAndReceiveResponse> | 
|  | : public std::true_type {}; | 
|  | static_assert(sizeof(::llcpp::fidl::test::emptystruct::EmptyProtocol:: | 
|  | SendAndReceiveResponse) == | 
|  | ::llcpp::fidl::test::emptystruct::EmptyProtocol:: | 
|  | SendAndReceiveResponse::PrimarySize); | 
|  | static_assert( | 
|  | offsetof( | 
|  | ::llcpp::fidl::test::emptystruct::EmptyProtocol::SendAndReceiveResponse, | 
|  | e) == 16); | 
|  | }  // namespace fidl | 
|  | namespace llcpp { | 
|  | namespace fidl { | 
|  | namespace test { | 
|  | namespace emptystruct { | 
|  | namespace wire {}  // namespace wire | 
|  |  | 
|  | #ifdef __Fuchsia__ | 
|  | class EmptyProtocol::AsyncEventHandler | 
|  | : public EmptyProtocol::EventHandlerInterface { | 
|  | public: | 
|  | AsyncEventHandler() = default; | 
|  |  | 
|  | virtual void Unbound(::fidl::UnbindInfo info) {} | 
|  | }; | 
|  |  | 
|  | class EmptyProtocol::SendAndReceiveResponseContext | 
|  | : public ::fidl::internal::ResponseContext { | 
|  | public: | 
|  | SendAndReceiveResponseContext(); | 
|  |  | 
|  | virtual void OnReply(EmptyProtocol::SendAndReceiveResponse* message) = 0; | 
|  |  | 
|  | private: | 
|  | void OnReply(uint8_t* reply) override; | 
|  | }; | 
|  |  | 
|  | class EmptyProtocol::ClientImpl final : private ::fidl::internal::ClientBase { | 
|  | public: | 
|  | // Asynchronous variant of |EmptyProtocol.SendAndReceive()|. | 
|  | // Allocates 24 bytes of request buffer on the stack. The callback is stored | 
|  | // on the heap. | 
|  | ::fidl::Result SendAndReceive( | 
|  | ::llcpp::fidl::test::emptystruct::wire::Empty e, | 
|  | ::fit::callback<void(SendAndReceiveResponse* response)> _cb); | 
|  |  | 
|  | // Asynchronous variant of |EmptyProtocol.SendAndReceive()|. | 
|  | // Caller provides the backing storage for FIDL message via request buffer. | 
|  | // Ownership of |_context| is given unsafely to the binding until |OnError| | 
|  | // or |OnReply| are called on it. | 
|  | ::fidl::Result SendAndReceive(::fidl::BufferSpan _request_buffer, | 
|  | ::llcpp::fidl::test::emptystruct::wire::Empty e, | 
|  | SendAndReceiveResponseContext* _context); | 
|  |  | 
|  | // Synchronous variant of |EmptyProtocol.SendAndReceive()|. | 
|  | // Allocates 48 bytes of message buffer on the stack. No heap allocation | 
|  | // necessary. | 
|  | ResultOf::SendAndReceive SendAndReceive_Sync( | 
|  | ::llcpp::fidl::test::emptystruct::wire::Empty e); | 
|  |  | 
|  | // Synchronous variant of |EmptyProtocol.SendAndReceive()|. | 
|  | // Caller provides the backing storage for FIDL message via request and | 
|  | // response buffers. | 
|  | UnownedResultOf::SendAndReceive SendAndReceive_Sync( | 
|  | ::fidl::BufferSpan _request_buffer, | 
|  | ::llcpp::fidl::test::emptystruct::wire::Empty e, | 
|  | ::fidl::BufferSpan _response_buffer); | 
|  |  | 
|  | // Allocates 24 bytes of message buffer on the stack. No heap allocation | 
|  | // necessary. | 
|  | ::fidl::Result Send(::llcpp::fidl::test::emptystruct::wire::Empty e); | 
|  |  | 
|  | // Caller provides the backing storage for FIDL message via request buffer. | 
|  | ::fidl::Result Send(::fidl::BufferSpan _request_buffer, | 
|  | ::llcpp::fidl::test::emptystruct::wire::Empty e); | 
|  |  | 
|  | AsyncEventHandler* event_handler() const { return event_handler_.get(); } | 
|  |  | 
|  | private: | 
|  | friend class ::fidl::Client<EmptyProtocol>; | 
|  | friend class ::fidl::internal::ControlBlock<EmptyProtocol>; | 
|  |  | 
|  | explicit ClientImpl(std::shared_ptr<AsyncEventHandler> event_handler) | 
|  | : event_handler_(std::move(event_handler)) {} | 
|  |  | 
|  | std::optional<::fidl::UnbindInfo> DispatchEvent( | 
|  | fidl_incoming_msg_t* msg) override; | 
|  |  | 
|  | std::shared_ptr<AsyncEventHandler> event_handler_; | 
|  | }; | 
|  | #endif | 
|  |  | 
|  | #ifdef __Fuchsia__ | 
|  | // |EventSender| owns a server endpoint of a channel speaking | 
|  | // the EmptyProtocol protocol, and can send events in that protocol. | 
|  | class EmptyProtocol::EventSender { | 
|  | public: | 
|  | // Constructs an event sender with an invalid channel. | 
|  | EventSender() = default; | 
|  |  | 
|  | explicit EventSender( | 
|  | ::fidl::ServerEnd<::llcpp::fidl::test::emptystruct::EmptyProtocol> | 
|  | server_end) | 
|  | : server_end_(std::move(server_end)) {} | 
|  |  | 
|  | // The underlying server channel endpoint, which may be replaced at run-time. | 
|  | const ::fidl::ServerEnd<EmptyProtocol>& server_end() const { | 
|  | return server_end_; | 
|  | } | 
|  | ::fidl::ServerEnd<EmptyProtocol>& server_end() { return server_end_; } | 
|  |  | 
|  | const ::zx::channel& channel() const { return server_end_.channel(); } | 
|  | ::zx::channel& channel() { return server_end_.channel(); } | 
|  |  | 
|  | // Whether the underlying channel is valid. | 
|  | bool is_valid() const { return server_end_.is_valid(); } | 
|  |  | 
|  | zx_status_t Receive(::llcpp::fidl::test::emptystruct::wire::Empty e) const; | 
|  |  | 
|  | // Caller provides the backing storage for FIDL message via response buffers. | 
|  | zx_status_t Receive(::fidl::BufferSpan _buffer, | 
|  | ::llcpp::fidl::test::emptystruct::wire::Empty e) const; | 
|  |  | 
|  | private: | 
|  | ::fidl::ServerEnd<EmptyProtocol> server_end_; | 
|  | }; | 
|  |  | 
|  | class EmptyProtocol::WeakEventSender { | 
|  | public: | 
|  | zx_status_t Receive(::llcpp::fidl::test::emptystruct::wire::Empty e) const { | 
|  | if (auto _binding = binding_.lock()) { | 
|  | return _binding->event_sender().Receive(std::move(e)); | 
|  | } | 
|  | return ZX_ERR_CANCELED; | 
|  | } | 
|  |  | 
|  | // Caller provides the backing storage for FIDL message via response buffers. | 
|  | zx_status_t Receive(::fidl::BufferSpan _buffer, | 
|  | ::llcpp::fidl::test::emptystruct::wire::Empty e) const { | 
|  | if (auto _binding = binding_.lock()) { | 
|  | return _binding->event_sender().Receive(std::move(_buffer), std::move(e)); | 
|  | } | 
|  | return ZX_ERR_CANCELED; | 
|  | } | 
|  |  | 
|  | private: | 
|  | friend class ::fidl::ServerBindingRef<EmptyProtocol>; | 
|  |  | 
|  | explicit WeakEventSender( | 
|  | std::weak_ptr<::fidl::internal::AsyncServerBinding<EmptyProtocol>> | 
|  | binding) | 
|  | : binding_(std::move(binding)) {} | 
|  |  | 
|  | std::weak_ptr<::fidl::internal::AsyncServerBinding<EmptyProtocol>> binding_; | 
|  | }; | 
|  | #endif | 
|  |  | 
|  | }  // namespace emptystruct | 
|  | }  // namespace test | 
|  | }  // namespace fidl | 
|  | }  // namespace llcpp |