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