// Copyright 2021 The Chromium OS 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 DIAGNOSTICS_COMMON_DBUS_UTILS_H_
#define DIAGNOSTICS_COMMON_DBUS_UTILS_H_

#include <utility>

#include <base/callback.h>
#include <base/callback_helpers.h>
#include <brillo/errors/error.h>

namespace diagnostics {

// SplitDbusCallback turns a callback into two callbacks, one for results,
// another for error. This is for who want to use one callback to handle the
// result from dbus binding.
// It turns |void(err, result...)| into |void(result...)| and |void(err)|.
template <typename... Args>
auto SplitDbusCallback(
    base::OnceCallback<void(brillo::Error*, Args...)>&& callback) {
  auto [cb1, cb2] = base::SplitOnceCallback(std::move(callback));
  auto on_success = base::BindOnce(
      [](base::OnceCallback<void(brillo::Error*, Args...)>&& callback,
         Args... args) { std::move(callback).Run(nullptr, args...); },
      std::move(cb1));
  auto on_error = base::BindOnce(
      [](base::OnceCallback<void(brillo::Error*, Args...)>&& callback,
         brillo::Error* err) { std::move(callback).Run(err, Args{}...); },
      std::move(cb2));
  return std::make_pair(std::move(on_success), std::move(on_error));
}

}  // namespace diagnostics

#endif  // DIAGNOSTICS_COMMON_DBUS_UTILS_H_
