// Copyright 2022 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef FUCHSIA_SDK_EXAMPLES_BIND_LIBRARY_CHILD_CHILD_DRIVER_H_
#define FUCHSIA_SDK_EXAMPLES_BIND_LIBRARY_CHILD_CHILD_DRIVER_H_

#include <lib/driver/component/cpp/driver_cpp.h>

namespace child_driver {

class ChildDriver : public driver::DriverBase {
 public:
  ChildDriver(driver::DriverStartArgs start_args, fdf::UnownedDispatcher driver_dispatcher)
      : driver::DriverBase("child-driver", std::move(start_args), std::move(driver_dispatcher)) {}
  virtual ~ChildDriver() = default;

  zx::result<> Start() override;
};

}  // namespace child_driver

#endif  // FUCHSIA_SDK_EXAMPLES_BIND_LIBRARY_CHILD_CHILD_DRIVER_H_
