chromium/fuchsia_web/common/test/fit_adapter.h

// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef FUCHSIA_WEB_COMMON_TEST_FIT_ADAPTER_H_
#define FUCHSIA_WEB_COMMON_TEST_FIT_ADAPTER_H_

#include <lib/fit/function.h>

#include "base/functional/callback.h"

// Adapts a base::OnceCallback<> to a fit::function<>, to allow //base callbacks
// to be used directly as FIDL result callbacks.
template <typename ReturnType, typename... ArgumentTypes>
fit::function<ReturnType(ArgumentTypes...)> CallbackToFitFunction(
    base::OnceCallback<ReturnType(ArgumentTypes...)> callback) {
  return [callback = std::move(callback)](ArgumentTypes... args) mutable {
    std::move(callback).Run(std::forward<ArgumentTypes>(args)...);
  };
}

#endif  // FUCHSIA_WEB_COMMON_TEST_FIT_ADAPTER_H_