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