3#include <StormByte/config/exception.hxx>
4#include <StormByte/config/visibility.h>
15namespace StormByte::Config::Item {
20 enum class Type:
char {
34 static constexpr std::string TypeToString(
const Type& t)
noexcept {
36 case Type::String:
return "String";
37 case Type::Integer:
return "Integer";
38 case Type::Double:
return "Double";
39 case Type::Comment:
return "Comment";
40 case Type::Bool:
return "Bool";
41 case Type::Container:
return "Container";
42 default:
return "Unknown";
50 enum class STORMBYTE_CONFIG_PUBLIC CommentType:
char {
61 constexpr STORMBYTE_CONFIG_PUBLIC std::string TypeToString(
const CommentType& t)
noexcept {
63 case CommentType::SingleLineBash:
return "Bash like single line comment";
64 case CommentType::SingleLineC:
return "C++ like single line comment";
65 case CommentType::MultiLineC:
return "C/C++ like multi line comment";
66 default:
return "Unknown";
74 enum class STORMBYTE_CONFIG_PUBLIC ContainerType:
char {
84 constexpr STORMBYTE_CONFIG_PUBLIC std::string TypeToString(
const ContainerType& t)
noexcept {
86 case ContainerType::Group:
return "Group";
87 case ContainerType::List:
return "List";
88 default:
return "Unknown";
97 constexpr STORMBYTE_CONFIG_PUBLIC ContainerType TypeFromStartCharacter(
const char& start)
noexcept {
99 case '{':
return ContainerType::Group;
100 case '[':
return ContainerType::List;
101 default:
throw Exception(
"Unknown start character " + std::string(1, start) +
" for container");
107 std::is_same_v<T, double> ||
108 std::is_same_v<T, bool> ||
109 std::is_same_v<T, std::string>;