1 #pragma once
2 
3 #include <memory>
4 #include <string>
5 
6 #ifdef __APPLE__
7 #include "RNReanimated/Scheduler.h"
8 #else
9 #include "Scheduler.h"
10 #endif
11 
12 namespace reanimated {
13 
14 struct ErrorWrapper {
15   std::string message = "";
16   bool handled = true;
17 };
18 
19 class ErrorHandler {
20  public:
raise()21   bool raise() {
22     if (getError()->handled) {
23       return false;
24     }
25     this->getScheduler()->scheduleOnUI([this]() mutable { this->raiseSpec(); });
26     return true;
27   }
28   virtual std::shared_ptr<Scheduler> getScheduler() = 0;
29   virtual std::shared_ptr<ErrorWrapper> getError() = 0;
30   virtual void setError(std::string message) = 0;
~ErrorHandler()31   virtual ~ErrorHandler() {}
32 
33  protected:
34   virtual void raiseSpec() = 0;
35 };
36 
37 } // namespace reanimated
38