Function parseVersion [src]

Similar to SemanticVersion.parse, but with following changes: Leading zeroes are allowed. Supports only 2 or 3 version components (major, minor, [patch]). If 3-rd component is omitted, it will be 0.

Prototype

pub fn parseVersion(ver: []const u8) error{ InvalidVersion, Overflow }!SemanticVersion

Parameters

ver: []const u8

Possible Errors

InvalidVersion
Overflow

Example

test parseVersion { try std.testing.expectError(error.InvalidVersion, parseVersion("1")); try std.testing.expectEqual(SemanticVersion{ .major = 1, .minor = 2, .patch = 0 }, try parseVersion("1.2")); try std.testing.expectEqual(SemanticVersion{ .major = 1, .minor = 2, .patch = 3 }, try parseVersion("1.2.3")); try std.testing.expectError(error.InvalidVersion, parseVersion("1.2.3.4")); }

Source

pub fn parseVersion(ver: []const u8) error{ InvalidVersion, Overflow }!SemanticVersion { const parseVersionComponentFn = (struct { fn parseVersionComponentInner(component: []const u8) error{ InvalidVersion, Overflow }!usize { return std.fmt.parseUnsigned(usize, component, 10) catch |err| switch (err) { error.InvalidCharacter => return error.InvalidVersion, error.Overflow => return error.Overflow, }; } }).parseVersionComponentInner; var version_components = mem.splitScalar(u8, ver, '.'); const major = version_components.first(); const minor = version_components.next() orelse return error.InvalidVersion; const patch = version_components.next() orelse "0"; if (version_components.next() != null) return error.InvalidVersion; return .{ .major = try parseVersionComponentFn(major), .minor = try parseVersionComponentFn(minor), .patch = try parseVersionComponentFn(patch), }; }