SemVerAutoBuild.cs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. using System.Collections.Generic;
  2. using UnityEngine;
  3. namespace Artees.UnitySemVer
  4. {
  5. /// <summary>
  6. /// Sets the <see cref="SemVer.Build">build</see> metadata automatically
  7. /// </summary>
  8. /// <seealso cref="SemVer.Build"/>
  9. public abstract class SemVerAutoBuild
  10. {
  11. /// <summary>
  12. /// <see cref="SemVerAutoBuild"/> implementations
  13. /// </summary>
  14. public enum Type
  15. {
  16. /// <summary>
  17. /// Disables automatic <see cref="SemVer.Build">build</see> metadata
  18. /// </summary>
  19. Manual,
  20. /// <summary>
  21. /// Sets the <see cref="SemVer.Build">build</see> metadata to the
  22. /// <a href="https://docs.unity3d.com/Manual/UnityCloudBuildManifest.html">Unity Cloud Build</a>
  23. /// <see cref="Artees.UnitySemVer.CloudBuildManifest.BuildNumber">“build number”</see>
  24. /// </summary>
  25. /// <seealso cref="Artees.UnitySemVer.CloudBuildManifest"/>
  26. CloudBuildNumber
  27. }
  28. public static readonly IReadOnlyDictionary<Type, SemVerAutoBuild> Instances =
  29. new Dictionary<Type, SemVerAutoBuild>
  30. {
  31. {Type.Manual, new ManualBuild()},
  32. {Type.CloudBuildNumber, new CloudBuildNumberBuild()}
  33. };
  34. internal abstract string Get(string build);
  35. internal abstract string Set(string build);
  36. private class ManualBuild : SemVerAutoBuild
  37. {
  38. internal override string Get(string build)
  39. {
  40. return build;
  41. }
  42. internal override string Set(string build)
  43. {
  44. return build;
  45. }
  46. }
  47. private class CloudBuildNumberBuild : ReadOnly
  48. {
  49. internal override string Get(string build)
  50. {
  51. return CloudBuildManifest.Instance.IsLoaded
  52. ? CloudBuildManifest.Instance.BuildNumber.ToString()
  53. : string.Empty;
  54. }
  55. }
  56. public abstract class ReadOnly : SemVerAutoBuild
  57. {
  58. internal sealed override string Set(string build)
  59. {
  60. Debug.LogWarning("The build metadata is read-only");
  61. return build;
  62. }
  63. }
  64. }
  65. }