Example: Semantic Versioning with ddn.var.semver¶
This example demonstrates how to use the ddn.var.semver module to parse, sort, and display semantic version numbers in D. The code is based on the demo/var/semver.d file.
Example Code¶
/+ dub.sdl:
name "var-semver"
dependency "ddn" version=">=1.0.0"
+/
/**
* Demo application for ddn.var.semver
* Creates a list of SemVer objects (pre-release, release, build metadata),
* sorts them, and prints the sorted list.
* dub build --single demo/var/semver.d && demo/var/demo-var-semver
*/
import std.stdio;
import std.algorithm : sort, map;
import std.array : array;
import ddn.var.semver;
void main() {
// Define a variety of SemVer strings
string[] versionStrings = [
"1.0.0", // release
"1.0.0-alpha", // pre-release
"1.0.0-alpha.1", // pre-release
"1.0.0-0.3.7", // pre-release
"1.0.0-x.7.z.92", // pre-release
"1.0.0+20130313144700", // build metadata (post-release)
"1.0.0-beta+exp.sha.5114f85", // pre-release + build metadata
"2.0.0", // release
"2.0.0+build.1848", // build metadata (post-release)
"2.0.0-beta", // pre-release
"2.0.0-beta.2", // pre-release
"2.0.0-beta.11", // pre-release
"2.0.0-rc.1", // pre-release
"2.0.0-alpha", // pre-release
"0.1.0", // release
"0.1.0-alpha", // pre-release
"0.1.0+build.1", // build metadata (post-release)
"1.0.0+build.1", // build metadata (post-release)
"1.0.0+build.2", // build metadata (post-release)
"1.0.1", // release
"1.1.0", // release
"1.0.0-rc.1", // pre-release
"1.0.0-rc.1+build.1", // pre-release + build metadata
];
// Parse into SemVer objects
auto versions = versionStrings
.map!(s => SemVer.parse(s))
.array;
// Shuffle the list to ensure it's unsorted (optional, but for demo)
import std.random : randomShuffle;
randomShuffle(versions);
// Sort the versions (uses opCmp)
versions.sort();
// Output the sorted list
writeln("Sorted Semantic Versions:");
foreach (v; versions)
writeln(v.toString());
}
What This Example Shows¶
- Parsing: Converts a variety of semantic version strings into
SemVerobjects. - Sorting: Demonstrates how semantic versions are sorted according to the SemVer specification.
- Display: Prints the sorted list of versions.
Output Example¶
The output will be a sorted list of semantic versions, with pre-releases and build metadata handled according to the SemVer rules. Example output:
Sorted Semantic Versions:
0.1.0-alpha
0.1.0
0.1.0+build.1
1.0.0-0.3.7
1.0.0-alpha
1.0.0-alpha.1
1.0.0-beta+exp.sha.5114f85
1.0.0-rc.1
1.0.0
1.0.0+20130313144700
1.0.0+build.1
1.0.0+build.2
1.0.1
1.1.0
2.0.0-alpha
2.0.0-beta
2.0.0-beta.2
2.0.0-beta.11
2.0.0-rc.1
2.0.0
2.0.0+build.1848