13#ifndef IOX2_RESPONSE_HPP
14#define IOX2_RESPONSE_HPP
27template <ServiceType Service,
typename ResponsePayload,
typename ResponseUserHeader>
43 template <typename T = ResponseUserHeader,
44 typename = std::enable_if_t<!std::is_same<
void, ResponseUserHeader>::value, T>>
48 template <typename T = ResponsePayload, typename = std::enable_if_t<!bb::IsSlice<T>::VALUE,
void>>
49 auto
payload() const -> const T&;
52 template <typename T = ResponsePayload, typename = std::enable_if_t<bb::IsSlice<T>::VALUE,
void>>
53 auto
payload() const -> bb::ImmutableSlice<ValueType>;
60 template <
ServiceType, typename, typename, typename, typename>
63 explicit
Response(iox2_response_h handle) noexcept;
67 iox2_response_h m_handle =
nullptr;
72 *
this = std::move(rhs);
75template <ServiceType Service,
typename ResponsePayload,
typename ResponseUserHeader>
79 m_handle = rhs.m_handle;
80 rhs.m_handle =
nullptr;
86template <ServiceType Service,
typename ResponsePayload,
typename ResponseUserHeader>
91template <ServiceType Service,
typename ResponsePayload,
typename ResponseUserHeader>
93 iox2_response_header_h header_handle =
nullptr;
94 iox2_response_header(&m_handle,
nullptr, &header_handle);
98template <ServiceType Service,
typename ResponsePayload,
typename ResponseUserHeader>
99template <
typename T,
typename>
101 const void* ptr =
nullptr;
102 iox2_response_user_header(&m_handle, &ptr);
103 return *
static_cast<const T*
>(ptr);
106template <ServiceType Service,
typename ResponsePayload,
typename ResponseUserHeader>
107template <
typename T,
typename>
109 const void* ptr =
nullptr;
110 iox2_response_payload(&m_handle, &ptr,
nullptr);
111 return *
static_cast<const T*
>(ptr);
114template <ServiceType Service,
typename ResponsePayload,
typename ResponseUserHeader>
115template <
typename T,
typename>
117 const void* ptr =
nullptr;
118 size_t number_of_elements = 0;
119 iox2_response_payload(&m_handle, &ptr, &number_of_elements);
123 auto length = number_of_elements;
124 if (std::is_same<ValueType, CustomPayloadMarker>::value) {
125 length = iox2_response_payload_number_of_bytes(&m_handle);
128 return bb::ImmutableSlice<ValueType>(
static_cast<const ValueType*
>(ptr), length);
131template <ServiceType Service,
typename ResponsePayload,
typename ResponseUserHeader>
133 return header().server_port_id();
136template <ServiceType Service,
typename ResponsePayload,
typename ResponseUserHeader>
141template <ServiceType Service,
typename ResponsePayload,
typename ResponseUserHeader>
142inline void Response<Service, ResponsePayload, ResponseUserHeader>::drop() {
143 if (m_handle !=
nullptr) {
144 iox2_response_drop(m_handle);
auto payload() const -> const T &
Returns a reference to the payload of the response.
auto operator=(Response &&rhs) noexcept -> Response &
auto operator=(const Response &) noexcept -> Response &=delete
auto header() const -> ResponseHeader
Returns a reference to the [ResponseHeader].
Response(Response &&rhs) noexcept
auto user_header() const -> const T &
Returns a reference to the user header of the response.
auto origin() const -> UniqueServerId
Response(const Response &) noexcept=delete
The system-wide unique id of a [Server].