Home | History | Annotate | Download | only in doxygen
      1 #include "rxcpp/rx.hpp"
      2 namespace rxu=rxcpp::util;
      3 
      4 #include "rxcpp/rx-test.hpp"
      5 #include "catch.hpp"
      6 
      7 #if RXCPP_USE_EXCEPTIONS
      8 SCENARIO("composite_exception sample"){
      9     printf("//! [composite_exception sample]\n");
     10     auto o1 = rxcpp::observable<>::error<int>(std::runtime_error("Error from source o1\n"));
     11     auto o2 = rxcpp::observable<>::error<int>(std::runtime_error("Error from source o2\n"));
     12     auto o3 = rxcpp::observable<>::timer(std::chrono::milliseconds(5)).map([](int) {return 3;});
     13     auto values = o1.merge_delay_error(o2, o3);
     14     values.
     15         subscribe(
     16             [](int v){printf("OnNext: %d\n", v);},
     17             [](std::exception_ptr composite_e) {
     18                 printf("OnError %s\n", rxu::what(composite_e).c_str());
     19                 try { std::rethrow_exception(composite_e); }
     20                 catch(rxcpp::composite_exception const &ce) {
     21                     for(std::exception_ptr particular_e : ce.exceptions) {
     22 
     23                         try{ std::rethrow_exception(particular_e); }
     24                         catch(std::runtime_error const &error) { printf(" *** %s\n", error.what()); }
     25 
     26                     }
     27                 }
     28             },
     29             [](){printf("OnCompleted\n");}
     30         );
     31     printf("//! [composite_exception sample]\n");
     32 }
     33 #endif
     34