1 // Copyright 2017 The Fuchsia Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include <lib/async/cpp/receiver.h>
6 
7 #include <utility>
8 
9 namespace async {
10 
ReceiverBase(async_receiver_handler_t * handler)11 ReceiverBase::ReceiverBase(async_receiver_handler_t* handler)
12     : receiver_{{ASYNC_STATE_INIT}, handler} {}
13 
14 ReceiverBase::~ReceiverBase() = default;
15 
QueuePacket(async_dispatcher_t * dispatcher,const zx_packet_user_t * data)16 zx_status_t ReceiverBase::QueuePacket(async_dispatcher_t* dispatcher, const zx_packet_user_t* data) {
17     return async_queue_packet(dispatcher, &receiver_, data);
18 }
19 
Receiver(Handler handler)20 Receiver::Receiver(Handler handler)
21     : ReceiverBase(&Receiver::CallHandler), handler_(std::move(handler)) {}
22 
23 Receiver::~Receiver() = default;
24 
CallHandler(async_dispatcher_t * dispatcher,async_receiver_t * receiver,zx_status_t status,const zx_packet_user_t * data)25 void Receiver::CallHandler(async_dispatcher_t* dispatcher, async_receiver_t* receiver,
26                            zx_status_t status, const zx_packet_user_t* data) {
27     auto self = Dispatch<Receiver>(receiver);
28     self->handler_(dispatcher, self, status, data);
29 }
30 
31 } // namespace async
32