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
7namespace async {
8
9ReceiverBase::ReceiverBase(async_receiver_handler_t* handler)
10    : receiver_{{ASYNC_STATE_INIT}, handler} {}
11
12ReceiverBase::~ReceiverBase() = default;
13
14zx_status_t ReceiverBase::QueuePacket(async_dispatcher_t* dispatcher, const zx_packet_user_t* data) {
15    return async_queue_packet(dispatcher, &receiver_, data);
16}
17
18Receiver::Receiver(Handler handler)
19    : ReceiverBase(&Receiver::CallHandler), handler_(fbl::move(handler)) {}
20
21Receiver::~Receiver() = default;
22
23void Receiver::CallHandler(async_dispatcher_t* dispatcher, async_receiver_t* receiver,
24                           zx_status_t status, const zx_packet_user_t* data) {
25    auto self = Dispatch<Receiver>(receiver);
26    self->handler_(dispatcher, self, status, data);
27}
28
29} // namespace async
30