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