StormByte-Config 2.0.0
C++26 configuration-document module of the StormByte suite
 
Loading...
Searching...
No Matches
type.hxx
Go to the documentation of this file.
1/*
2 * Copyright (C) 2024-2026 David C. Manuelda (StormBytePP)
3 *
4 * This file is part of StormByte-Config.
5 *
6 * StormByte-Config original source is dual-licensed:
7 *
8 * 1. GNU Lesser General Public License v3.0 (or later)
9 * You may redistribute and/or modify this file under the terms of the
10 * GNU Lesser General Public License as published by the Free Software
11 * Foundation, either version 3 of the License, or (at your option)
12 * any later version.
13 *
14 * 2. Commercial license
15 * Alternatively, this file may be used under the terms of a commercial
16 * license agreement with the copyright holder
17 * (David C. Manuelda <StormByte@gmail.com>).
18 *
19 * Both licenses apply only to original StormByte-Config source in this
20 * repository. They do not cover other StormByte modules or any third-party
21 * material shipped with this repository. The bundled StormByte Base tree
22 * under thirdparty/ remains under its own license.
23 *
24 * Neither license grants any patent rights. Any patent licenses required
25 * to use this software or third-party components must be obtained separately
26 * from the patent holders.
27 *
28 * StormByte-Config is distributed in the hope that it will be useful,
29 * but WITHOUT ANY WARRANTY; without even the implied warranty of
30 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
31 * GNU Lesser General Public License for more details.
32 *
33 * You should have received a copy of the GNU Lesser General Public License
34 * version 3 along with StormByte-Config. If not, see
35 * <https://www.gnu.org/licenses/lgpl-3.0.html>.
36 *
37 * SPDX-License-Identifier: LGPL-3.0-or-later OR LicenseRef-StormByte-Commercial
38 */
39
40#pragma once
41
45
46#include <string_view>
47
56 enum class Type: char {
57 Bool,
58 Comment,
59 Container,
60 Double,
61 Integer,
62 String,
63 Binary,
64 Value
65 };
66
72 static constexpr std::string_view TypeToString(const Type& t) noexcept {
73 switch(t) {
74 case Type::String: return "String";
75 case Type::Integer: return "Integer";
76 case Type::Double: return "Double";
77 case Type::Comment: return "Comment";
78 case Type::Bool: return "Bool";
79 case Type::Container: return "Container";
80 case Type::Binary: return "Binary";
81 case Type::Value: return "Value";
82 default: return "Unknown";
83 }
84 }
85
91 SingleLineBash = 2,
92 SingleLineC = 5,
93 MultiLineC = 8
94 };
95
101 constexpr STORMBYTE_CONFIG_PUBLIC std::string_view TypeToString(const CommentType& t) noexcept {
102 switch(t) {
103 case CommentType::SingleLineBash: return "Bash like single line comment";
104 case CommentType::SingleLineC: return "C++ like single line comment";
105 case CommentType::MultiLineC: return "C/C++ like multi line comment";
106 default: return "Unknown";
107 }
108 }
109
115 Group,
116 List
117 };
118
124 constexpr STORMBYTE_CONFIG_PUBLIC std::string_view TypeToString(const ContainerType& t) noexcept {
125 switch(t) {
126 case ContainerType::Group: return "Group";
127 case ContainerType::List: return "List";
128 default: return "Unknown";
129 }
130 }
131
139 switch(start) {
140 case '{': return ContainerType::Group;
141 case '[': return ContainerType::List;
142 default: throw Exception("Unknown start character {} for container", start);
143 }
144 }
145
146 struct Integer {};
147 struct Double {};
148 struct Bool {};
149 struct Text {};
150 struct Binary {};
151}
Root exception for Config.
Definition exception.hxx:57
Comment item (#, // or /* *\/).
Definition comment.hxx:59
Holds child items.
Definition container.hxx:61
Named container ({ ... }).
Definition group.hxx:56
Unnamed container ([ ... ]).
Definition list.hxx:56
Scalar configuration item.
Definition value.hxx:58
Configuration items (values, comments, groups, lists).
Definition hook.hxx:49
Type
Node kind in the document tree.
Definition type.hxx:56
@ String
Text leaf (StormByte::Safe::String).
@ Value
Any leaf (Value node). Not used on the wire.
@ Binary
Binary leaf (StormByte::BinaryData).
constexpr ContainerType TypeFromStartCharacter(const char &start)
Resolves a container type from its opening character.
Definition type.hxx:138
static constexpr std::string_view TypeToString(const Type &t) noexcept
Converts a Type to its string representation.
Definition type.hxx:72
CommentType
Comment syntax used in the text document.
Definition type.hxx:90
@ SingleLineC
// until end of line
@ SingleLineBash
# until end of line
ContainerType
Group ({}) or list ([]).
Definition type.hxx:114
Tag for As<Binary>() → StormByte::BinaryData.
Definition type.hxx:150
Tag for As<Bool>() → bool.
Definition type.hxx:148
Tag for As<Double>() → double (Integer promotes).
Definition type.hxx:147
Tag for As<Integer>() → int.
Definition type.hxx:146
Tag for As<Text>() → StormByte::Safe::String.
Definition type.hxx:149
#define STORMBYTE_CONFIG_PUBLIC
Definition visibility.h:52