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