Files
Eric F d398a6ced2 Add extracted tools: CitrineOS, OpenOCPP, ShapeShifter
- CitrineOS core extracted (CSMS OCPP 2.0.1)
- OpenOCPP extracted (firmware OCPP 1.6J/2.0.1)
- ShapeShifter library installed (pip install -e)
- ShapeShifter specification extracted
- EVerest extracted

TODO updated with progress
2026-06-08 00:38:27 -04:00

57 lines
5.2 KiB
C++

// SPDX-License-Identifier: Apache-2.0
// Copyright 2020 - 2021 Pionix GmbH and Contributors to EVerest
#ifndef UTILS_HPP
#define UTILS_HPP
#include <everest/logging.hpp>
#include <everest/metamacros.hpp>
namespace EverestJs {
// this is needed to get javascript stacktraces whenever possible while still logging boost error information
#define EVLOG_AND_RETHROW(...) \
do { \
try { \
throw; \
} catch (Napi::Error & e) { \
try { \
BOOST_THROW_EXCEPTION(boost::enable_error_info(e) \
<< boost::log::BOOST_LOG_VERSION_NAMESPACE::current_scope()); \
} catch (boost::exception & ex) { \
char const* const* f = boost::get_error_info<boost::throw_file>(ex); \
int const* l = boost::get_error_info<boost::throw_line>(ex); \
char const* const* fn = boost::get_error_info<boost::throw_function>(ex); \
EVLOG_critical << "Catched top level Napi::Error, forwarding to javascript..." << std::endl \
<< (f ? *f : "") << ":" << (l ? std::to_string(*l) : "") << " in Function " \
<< (fn ? *fn : "") << std::endl \
<< boost::diagnostic_information(e, true) << boost::diagnostic_information(ex, false) \
<< std::endl \
<< "==============================" << std::endl \
<< std::endl; \
} \
throw; /* this will forward the exception back to javascript and enable js backtraces */ \
} catch (std::exception & e) { \
try { \
BOOST_THROW_EXCEPTION(boost::enable_error_info(e) \
<< boost::log::BOOST_LOG_VERSION_NAMESPACE::current_scope()); \
} catch (boost::exception & ex) { \
char const* const* f = boost::get_error_info<boost::throw_file>(ex); \
int const* l = boost::get_error_info<boost::throw_line>(ex); \
char const* const* fn = boost::get_error_info<boost::throw_function>(ex); \
EVLOG_critical << "Catched top level exception, forwarding to javascript..." << std::endl \
<< (f ? *f : "") << ":" << (l ? std::to_string(*l) : "") << " in Function " \
<< (fn ? *fn : "") << std::endl \
<< boost::diagnostic_information(e, true) << boost::diagnostic_information(ex, false) \
<< std::endl \
<< "==============================" << std::endl \
<< std::endl; \
/* this will forward the exception to javascript and enable js backtraces */ \
metamacro_if_eq(0, metamacro_argcount(__VA_ARGS__))(throw;)(EVTHROW(Napi::Error::New( \
metamacro_at(0, __VA_ARGS__), Napi::String::New(metamacro_at(0, __VA_ARGS__), e.what())));) \
} \
} \
} while (0)
} // namespace EverestJs
#endif // UTILS_HPP