104819bfdSŁukasz Kosmaty #pragma once
204819bfdSŁukasz Kosmaty 
304819bfdSŁukasz Kosmaty #include <memory>
404819bfdSŁukasz Kosmaty #include <string>
5*5f154df9Saleqsio 
6*5f154df9Saleqsio #ifdef __APPLE__
7*5f154df9Saleqsio #include "RNReanimated/Scheduler.h"
8*5f154df9Saleqsio #else
904819bfdSŁukasz Kosmaty #include "Scheduler.h"
10*5f154df9Saleqsio #endif
1104819bfdSŁukasz Kosmaty 
1204819bfdSŁukasz Kosmaty namespace reanimated {
1304819bfdSŁukasz Kosmaty 
1404819bfdSŁukasz Kosmaty struct ErrorWrapper {
1504819bfdSŁukasz Kosmaty   std::string message = "";
1604819bfdSŁukasz Kosmaty   bool handled = true;
1704819bfdSŁukasz Kosmaty };
1804819bfdSŁukasz Kosmaty 
1904819bfdSŁukasz Kosmaty class ErrorHandler {
2004819bfdSŁukasz Kosmaty  public:
raise()2104819bfdSŁukasz Kosmaty   bool raise() {
2204819bfdSŁukasz Kosmaty     if (getError()->handled) {
2304819bfdSŁukasz Kosmaty       return false;
2404819bfdSŁukasz Kosmaty     }
2504819bfdSŁukasz Kosmaty     this->getScheduler()->scheduleOnUI([this]() mutable { this->raiseSpec(); });
2604819bfdSŁukasz Kosmaty     return true;
2704819bfdSŁukasz Kosmaty   }
2804819bfdSŁukasz Kosmaty   virtual std::shared_ptr<Scheduler> getScheduler() = 0;
2904819bfdSŁukasz Kosmaty   virtual std::shared_ptr<ErrorWrapper> getError() = 0;
3004819bfdSŁukasz Kosmaty   virtual void setError(std::string message) = 0;
~ErrorHandler()3104819bfdSŁukasz Kosmaty   virtual ~ErrorHandler() {}
3204819bfdSŁukasz Kosmaty 
3304819bfdSŁukasz Kosmaty  protected:
3404819bfdSŁukasz Kosmaty   virtual void raiseSpec() = 0;
3504819bfdSŁukasz Kosmaty };
3604819bfdSŁukasz Kosmaty 
3704819bfdSŁukasz Kosmaty } // namespace reanimated
38