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