Deluge Firmware 1.3.0
Build date: 2025.04.16
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
9struct 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:
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};
Used to parse SemVers from strings.
Definition semver.h:40
Error
Common parsing errors.
Definition semver.h:43
@ INVALID_NUMBER
Could not parse the numeric.
Definition semver.h:45
@ WRONG_CHAR
Did not find the expected char.
Definition semver.h:48
@ END_OF_STREAM
Reached end of stream while parsing.
Definition semver.h:51
std::expected< void, Error > expect(char expected)
Expect a character to be the next in the stream.
Definition semver.cpp:93
std::string_view parsePreRelease()
Consumes all characters up to the build-tag identifier '+' and returns them.
Definition semver.cpp:65
std::expected< SemVer, Error > parse()
Execute the parser, returning either the well-formed SemVer or a Parser::Error.
Definition semver.cpp:25
std::expected< SemVer, Error > parseVersionCore()
Parses a Semantic Versioning "version core" (i.e. '1.20.7') from the input stream.
Definition semver.cpp:55
Parser(std::string_view input)
Create a new parser with the given string.
Definition semver.h:55
std::expected< uint8_t, Error > parseNumericIdentifier()
Parse a number from the input stream.
Definition semver.cpp:83
Represents a simple Semantic Version number such as "4.3.7-beta".
Definition semver.h:9
bool operator==(const SemVer &) const =default
Default equality operator.
static std::expected< SemVer, Parser::Error > parse(std::string_view input)
Parse a SemVer from a string.
Definition semver.h:111
uint8_t patch
Patch version.
Definition semver.h:17
std::strong_ordering operator<=>(const SemVer &other) const
Compare two SemVer objects.
Definition semver.cpp:6
uint8_t minor
Minor version.
Definition semver.h:14
uint8_t major
Major version.
Definition semver.h:11
std::string_view pre_release
Pre-release string.
Definition semver.h:20