SemVerConverter.cs 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. namespace Artees.UnitySemVer
  2. {
  3. internal static class SemVerConverter
  4. {
  5. public static SemVer FromString(string semVerString)
  6. {
  7. var strings = semVerString.Split(SemVer.IdentifiersSeparator, SemVer.PreReleasePrefix, SemVer.BuildPrefix);
  8. var preReleaseStart = semVerString.IndexOf(SemVer.PreReleasePrefix);
  9. var buildIndex = semVerString.IndexOf(SemVer.BuildPrefix);
  10. var preReleaseEnd = buildIndex >= 0 ? buildIndex : semVerString.Length;
  11. var preRelease = preReleaseStart >= 0
  12. ? semVerString.Substring(preReleaseStart + 1, preReleaseEnd - preReleaseStart - 1)
  13. : string.Empty;
  14. var build = buildIndex >= 0 ? semVerString.Substring(buildIndex + 1) : string.Empty;
  15. uint major = 0;
  16. if (strings.Length > 0) uint.TryParse(strings[0], out major);
  17. uint minor = 1;
  18. if (strings.Length > 1) uint.TryParse(strings[1], out minor);
  19. uint patch = 0;
  20. if (strings.Length > 2) uint.TryParse(strings[2], out patch);
  21. var semVer = new SemVer
  22. {
  23. major = major,
  24. minor = minor,
  25. patch = patch,
  26. preRelease = preRelease,
  27. Build = build
  28. };
  29. return semVer;
  30. }
  31. public static string ToString(SemVer semVer)
  32. {
  33. var preRelease =
  34. string.IsNullOrEmpty(semVer.preRelease)
  35. ? string.Empty
  36. : $"{SemVer.PreReleasePrefix}{semVer.preRelease}";
  37. var build =
  38. string.IsNullOrEmpty(semVer.Build)
  39. ? string.Empty
  40. : $"{SemVer.BuildPrefix}{semVer.Build}";
  41. return string.Format("{1}{0}{2}{0}{3}{4}{5}",
  42. SemVer.IdentifiersSeparator,
  43. semVer.major,
  44. semVer.minor,
  45. semVer.patch,
  46. preRelease,
  47. build);
  48. }
  49. }
  50. }