| 38 | // 3: implement core logic of operator: accept downstream observer (of result_type) and convert it to upstream observer (of T). |
| 39 | template<typename Upstream, rpp::constraint::observer Observer> |
| 40 | auto lift(Observer&& observer) const |
| 41 | { |
| 42 | const auto dynamic_observer = std::forward<Observer>(observer).as_dynamic(); |
| 43 | return rpp::make_lambda_observer<Upstream>([dynamic_observer, fn = fn](const auto& v) { dynamic_observer.on_next(fn(v)); }, |
| 44 | [dynamic_observer](const std::exception_ptr& err) { dynamic_observer.on_error(err); }, |
| 45 | [dynamic_observer]() { dynamic_observer.on_completed(); }); |
| 46 | } |
| 47 | }; |
| 48 | |
| 49 | template<typename Fn> |
nothing calls this directly
no test coverage detected