104819bfdSŁukasz Kosmaty #pragma once 204819bfdSŁukasz Kosmaty 304819bfdSŁukasz Kosmaty #include <memory> 404819bfdSŁukasz Kosmaty #include <string> 5*5f154df9Saleqsio 6*5f154df9Saleqsio #ifdef __APPLE__ 7*5f154df9Saleqsio #include "RNReanimated/Scheduler.h" 8*5f154df9Saleqsio #else 904819bfdSŁukasz Kosmaty #include "Scheduler.h" 10*5f154df9Saleqsio #endif 1104819bfdSŁukasz Kosmaty 1204819bfdSŁukasz Kosmaty namespace reanimated { 1304819bfdSŁukasz Kosmaty 1404819bfdSŁukasz Kosmaty struct ErrorWrapper { 1504819bfdSŁukasz Kosmaty std::string message = ""; 1604819bfdSŁukasz Kosmaty bool handled = true; 1704819bfdSŁukasz Kosmaty }; 1804819bfdSŁukasz Kosmaty 1904819bfdSŁukasz Kosmaty class ErrorHandler { 2004819bfdSŁukasz Kosmaty public: raise()2104819bfdSŁukasz Kosmaty bool raise() { 2204819bfdSŁukasz Kosmaty if (getError()->handled) { 2304819bfdSŁukasz Kosmaty return false; 2404819bfdSŁukasz Kosmaty } 2504819bfdSŁukasz Kosmaty this->getScheduler()->scheduleOnUI([this]() mutable { this->raiseSpec(); }); 2604819bfdSŁukasz Kosmaty return true; 2704819bfdSŁukasz Kosmaty } 2804819bfdSŁukasz Kosmaty virtual std::shared_ptr<Scheduler> getScheduler() = 0; 2904819bfdSŁukasz Kosmaty virtual std::shared_ptr<ErrorWrapper> getError() = 0; 3004819bfdSŁukasz Kosmaty virtual void setError(std::string message) = 0; ~ErrorHandler()3104819bfdSŁukasz Kosmaty virtual ~ErrorHandler() {} 3204819bfdSŁukasz Kosmaty 3304819bfdSŁukasz Kosmaty protected: 3404819bfdSŁukasz Kosmaty virtual void raiseSpec() = 0; 3504819bfdSŁukasz Kosmaty }; 3604819bfdSŁukasz Kosmaty 3704819bfdSŁukasz Kosmaty } // namespace reanimated 38