From a3068901464dd158e41fecea299f5bb53ea9705e Mon Sep 17 00:00:00 2001 From: disarray2077 <86157825+disarray2077@users.noreply.github.com> Date: Wed, 29 Dec 2021 12:01:44 -0300 Subject: [PATCH] Add Parse method to Version struct --- BeefLibs/corlib/src/Version.bf | 38 ++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/BeefLibs/corlib/src/Version.bf b/BeefLibs/corlib/src/Version.bf index d40bf40f..9932ef82 100644 --- a/BeefLibs/corlib/src/Version.bf +++ b/BeefLibs/corlib/src/Version.bf @@ -12,6 +12,13 @@ namespace System Major = major; Minor = minor; } + + public this(uint32 major, uint32 minor, uint32 build) + { + Major = major; + Minor = minor; + Build = build; + } public this(uint32 major, uint32 minor, uint32 build, uint32 revision) { @@ -72,5 +79,36 @@ namespace System ((Major == major) && (Minor == minor) && (Build > build)) || ((Major == major) && (Minor == minor) && (Build == build) && (Revision >= revision)); } + + public static Result Parse(StringView version) + { + var components = version.Split('.'); + + mixin ParseComponent(var component) + { + uint32 parsedComponent; + if (!(uint32.Parse(component) case .Ok(out parsedComponent))) + return .Err; + parsedComponent + } + + let major = ParseComponent!(components.GetNext()); + let minor = ParseComponent!(components.GetNext()); + + if (!components.HasMore) + return Version(major, minor); + + let build = ParseComponent!(components.GetNext()); + + if (!components.HasMore) + return Version(major, minor, build); + + let revision = ParseComponent!(components.GetNext()); + + if (!components.HasMore) + return Version(major, minor, build, revision); + + return .Err; + } } }