// Copyright (c) Microsoft GmbH. // Use of this source code is governed by the MIT license that can be // found in the LICENSE file. #ifndef ELECTRON_SHELL_COMMON_CALLBACK_UTIL_H_ #define ELECTRON_SHELL_COMMON_CALLBACK_UTIL_H_ #include #include #include "base/functional/bind.h" #include "base/functional/callback.h" namespace electron { namespace internal { template class OnceCallbackHolder { public: explicit OnceCallbackHolder(base::OnceCallback cb) : cb_(std::move(cb)) {} void Run(Args... args) { if (cb_) std::move(cb_).Run(std::forward(args)...); } private: base::OnceCallback cb_; }; } // namespace internal template base::RepeatingCallback AdaptCallbackForRepeating( base::OnceCallback cb) { using Holder = internal::OnceCallbackHolder; return base::BindRepeating(&Holder::Run, std::make_unique(std::move(cb))); } } // namespace electron #endif // ELECTRON_SHELL_COMMON_CALLBACK_UTIL_H_