deferred.h 720 B

12345678910111213141516171819202122232425
  1. // This file is part of Desktop App Toolkit,
  2. // a set of libraries for developing nice desktop applications.
  3. //
  4. // For license and copyright information please follow this link:
  5. // https://github.com/desktop-app/legal/blob/master/LEGAL
  6. //
  7. #pragma once
  8. #include <rpl/producer.h>
  9. namespace rpl {
  10. template <
  11. typename Creator,
  12. typename Value = typename decltype(std::declval<Creator>()())::value_type,
  13. typename Error = typename decltype(std::declval<Creator>()())::error_type>
  14. inline auto deferred(Creator &&creator) {
  15. return make_producer<Value, Error>([
  16. creator = std::forward<Creator>(creator)
  17. ](const auto &consumer) mutable {
  18. return std::move(creator)().start_existing(consumer);
  19. });
  20. }
  21. } // namespace rpl