2#ifndef LIBSBX_SCRIPTING_MANAGED_MESSAGE_TYPE_HPP_
3#define LIBSBX_SCRIPTING_MANAGED_MESSAGE_TYPE_HPP_
7#include <libsbx/scripting/managed/string.hpp>
9namespace sbx::scripting::managed {
11enum class message_level {
15 all = info | warning | error
18template<
typename Type>
19requires (std::is_enum_v<Type>)
20constexpr auto to_underlying(Type value) {
21 return static_cast<std::underlying_type_t<Type>
>(value);
24constexpr message_level operator|(
const message_level lhs,
const message_level rhs)
noexcept {
25 return static_cast<message_level
>(to_underlying(lhs) | to_underlying(rhs));
28constexpr bool operator&(
const message_level lhs,
const message_level rhs)
noexcept {
29 return (to_underlying(lhs) & to_underlying(rhs)) != 0;
32constexpr message_level operator~(
const message_level value)
noexcept {
33 return static_cast<message_level
>(~to_underlying(value));
36constexpr message_level& operator|=(message_level& lhs,
const message_level& rhs)
noexcept {
37 return (lhs = (lhs | rhs));