16#include "pw_assert/assert.h"
17#include "pw_status/status.h"
62enum class SynchronousCallStatus {
72template <
typename Response>
81 : call_status_(internal::SynchronousCallStatus::kServer),
83 response_(std::move(response)) {}
99 [[nodiscard]]
constexpr bool is_error()
const;
102 [[nodiscard]]
constexpr bool ok()
const;
105 [[nodiscard]]
constexpr bool is_server_error()
const;
107 [[nodiscard]]
constexpr bool is_timeout()
const;
108 [[nodiscard]]
constexpr bool is_rpc_error()
const;
109 [[nodiscard]]
constexpr bool is_server_response()
const;
111 [[nodiscard]]
constexpr Status status()
const;
119 constexpr const Response& response()
const&;
120 constexpr Response& response() &;
121 constexpr const Response&& response()
const&&;
122 constexpr Response&& response() &&;
124 constexpr const Response& operator*()
const&;
125 constexpr Response& operator*() &;
126 constexpr const Response&& operator*()
const&&;
127 constexpr Response&& operator*() &&;
129 constexpr const Response* operator->()
const;
130 constexpr Response* operator->();
136 internal::SynchronousCallStatus call_status,
Status status)
137 : call_status_(call_status), status_(status) {}
139 internal::SynchronousCallStatus call_status_ =
140 internal::SynchronousCallStatus::kInvalid;
142 Response response_{};
149template <
typename Response>
156template <
typename Response>
157constexpr SynchronousCallResult<Response>
158SynchronousCallResult<Response>::RpcError(
Status status) {
159 return SynchronousCallResult(internal::SynchronousCallStatus::kRpc, status);
162template <
typename Response>
163constexpr bool SynchronousCallResult<Response>::is_error()
const {
167template <
typename Response>
168constexpr bool SynchronousCallResult<Response>::ok()
const {
169 return is_server_response() && status_.ok();
172template <
typename Response>
173constexpr bool SynchronousCallResult<Response>::is_server_error()
const {
174 return is_server_response() && !status_.ok();
177template <
typename Response>
178constexpr bool SynchronousCallResult<Response>::is_timeout()
const {
179 return call_status_ == internal::SynchronousCallStatus::kTimeout;
182template <
typename Response>
183constexpr bool SynchronousCallResult<Response>::is_rpc_error()
const {
184 return call_status_ == internal::SynchronousCallStatus::kRpc;
187template <
typename Response>
188constexpr bool SynchronousCallResult<Response>::is_server_response()
const {
189 return call_status_ == internal::SynchronousCallStatus::kServer;
192template <
typename Response>
193constexpr Status SynchronousCallResult<Response>::status()
const {
194 PW_ASSERT(call_status_ != internal::SynchronousCallStatus::kInvalid);
198template <
typename Response>
199constexpr const Response& SynchronousCallResult<Response>::response() const& {
200 PW_ASSERT(is_server_response());
204template <
typename Response>
205constexpr Response& SynchronousCallResult<Response>::response() & {
206 PW_ASSERT(is_server_response());
210template <
typename Response>
211constexpr const Response&& SynchronousCallResult<Response>::response() const&& {
212 PW_ASSERT(is_server_response());
213 return std::move(response_);
216template <
typename Response>
217constexpr Response&& SynchronousCallResult<Response>::response() && {
218 PW_ASSERT(is_server_response());
219 return std::move(response_);
222template <
typename Response>
223constexpr const Response& SynchronousCallResult<Response>::operator*() const& {
224 PW_ASSERT(is_server_response());
228template <
typename Response>
229constexpr Response& SynchronousCallResult<Response>::operator*() & {
230 PW_ASSERT(is_server_response());
234template <
typename Response>
235constexpr const Response&& SynchronousCallResult<Response>::operator*()
237 PW_ASSERT(is_server_response());
238 return std::move(response_);
241template <
typename Response>
242constexpr Response&& SynchronousCallResult<Response>::operator*() && {
243 PW_ASSERT(is_server_response());
244 return std::move(response_);
247template <
typename Response>
248constexpr const Response* SynchronousCallResult<Response>::operator->()
const {
249 PW_ASSERT(is_server_response());
253template <
typename Response>
254constexpr Response* SynchronousCallResult<Response>::operator->() {
255 PW_ASSERT(is_server_response());
265constexpr Status ConvertToStatus(
const rpc::SynchronousCallResult<T>& result) {
266 return result.status();
270constexpr T ConvertToValue(rpc::SynchronousCallResult<T>& result) {
271 return std::move(result.response());
static constexpr Status DeadlineExceeded()
Deadline passed before operation completed.
Definition: status.h:136
Definition: synchronous_call_result.h:73
The Pigweed namespace.
Definition: alignment.h:27