Deluge Firmware
1.3.0
Build date: 2026.08.29
Toggle main menu visibility
Loading...
Searching...
No Matches
semver.h
1
#include <compare>
// IWYU pragma: keep -used for operator <=>, false positive
2
#include <cstdint>
3
#include <expected>
4
#include <string_view>
5
9
struct
SemVer
{
11
uint8_t
major
;
12
14
uint8_t
minor
;
15
17
uint8_t
patch
;
18
20
std::string_view
pre_release
{};
21
22
// std::optional<std::string_view> build{};
23
25
bool
operator==
(
const
SemVer
&)
const
=
default
;
26
37
std::strong_ordering
operator<=>
(
const
SemVer
& other)
const
;
38
40
class
Parser
{
41
public
:
43
enum class
Error
{
45
INVALID_NUMBER,
46
48
WRONG_CHAR,
49
51
END_OF_STREAM,
52
};
53
55
Parser
(std::string_view input) : input_(input) {};
56
58
std::expected<SemVer, Error>
parse
();
59
60
private
:
61
std::string_view input_;
62
size_t
index_ = 0;
63
73
std::expected<void, Error>
expect
(
char
expected);
74
81
std::expected<SemVer, Error>
parseVersionCore
();
82
91
std::expected<uint8_t, Error>
parseNumericIdentifier
();
92
98
std::string_view
parsePreRelease
();
99
100
// std::string_view parseBuild();
101
};
102
111
static
std::expected<SemVer, Parser::Error>
parse
(std::string_view input) {
return
Parser
{input}.
parse
(); }
112
};
SemVer::Parser
Used to parse SemVers from strings.
Definition
semver.h:40
SemVer::Parser::Error
Error
Common parsing errors.
Definition
semver.h:43
SemVer::Parser::expect
std::expected< void, Error > expect(char expected)
Expect a character to be the next in the stream.
Definition
semver.cpp:93
SemVer::Parser::parsePreRelease
std::string_view parsePreRelease()
Consumes all characters up to the build-tag identifier '+' and returns them.
Definition
semver.cpp:65
SemVer::Parser::parse
std::expected< SemVer, Error > parse()
Execute the parser, returning either the well-formed SemVer or a Parser::Error.
Definition
semver.cpp:25
SemVer::Parser::parseVersionCore
std::expected< SemVer, Error > parseVersionCore()
Parses a Semantic Versioning "version core" (i.e. '1.20.7') from the input stream.
Definition
semver.cpp:55
SemVer::Parser::Parser
Parser(std::string_view input)
Create a new parser with the given string.
Definition
semver.h:55
SemVer::Parser::parseNumericIdentifier
std::expected< uint8_t, Error > parseNumericIdentifier()
Parse a number from the input stream.
Definition
semver.cpp:83
SemVer
Represents a simple Semantic Version number such as "4.3.7-beta".
Definition
semver.h:9
SemVer::operator==
bool operator==(const SemVer &) const =default
Default equality operator.
SemVer::parse
static std::expected< SemVer, Parser::Error > parse(std::string_view input)
Parse a SemVer from a string.
Definition
semver.h:111
SemVer::patch
uint8_t patch
Patch version.
Definition
semver.h:17
SemVer::operator<=>
std::strong_ordering operator<=>(const SemVer &other) const
Compare two SemVer objects.
Definition
semver.cpp:6
SemVer::minor
uint8_t minor
Minor version.
Definition
semver.h:14
SemVer::major
uint8_t major
Major version.
Definition
semver.h:11
SemVer::pre_release
std::string_view pre_release
Pre-release string.
Definition
semver.h:20