ddn.util.semver¶
This page provides runnable examples for working with semantic versions using the ddn.util.semver module.
1) Parse a version and inspect components¶
#!/usr/bin/env dub
/+ dub.sdl:
name "semver-parse"
dependency "ddn" version="*"
+/
module examples.semver_parse;
import std.stdio : writeln, writefln;
import ddn.util.semver;
void main() {
auto v = SemVer.parse("1.2.3-alpha.1+build.5");
writefln("major=%s minor=%s patch=%s", v.major, v.minor, v.patch);
writeln("prerelease = ", v.prerelease);
writeln("build = ", v.build);
writeln("string = ", v.toString());
}
2) Compare and sort versions¶
SemVer implements ordering (via opCmp), so you can sort versions naturally.
#!/usr/bin/env dub
/+ dub.sdl:
name "semver-sort"
dependency "ddn" version="*"
+/
module examples.semver_sort;
import std.stdio : writeln;
import std.algorithm : map, sort;
import std.array : array;
import ddn.util.semver;
void main() {
string[] inputs = [
"1.0.0",
"1.0.0-alpha",
"1.0.0-alpha.1",
"1.0.0+20130313144700",
"2.0.0-rc.1",
"2.0.0",
];
auto versions = inputs.map!(s => SemVer.parse(s)).array;
versions.sort();
writeln("Sorted:");
foreach (v; versions)
writeln(" ", v.toString());
}
3) Validate user input (error handling)¶
When parsing user-provided strings, handle SemVerParseException.
#!/usr/bin/env dub
/+ dub.sdl:
name "semver-validate"
dependency "ddn" version="*"
+/
module examples.semver_validate;
import std.stdio : writeln, writefln;
import ddn.util.semver;
void main() {
foreach (s; ["1.2.3", "01.2.3", "1.2", "1.2.3-beta"])
tryParse(s);
}
void tryParse(string s) {
try {
auto v = SemVer.parse(s);
writefln("OK %s -> %s", s, v.toString());
} catch (SemVerParseException e) {
writefln("FAIL %s -> %s", s, e.msg);
}
}