PackageNode.DependencyInfo.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. using System;
  2. namespace TBL.GodotSharp.Content;
  3. public partial class PackageNode
  4. {
  5. /// <summary>
  6. /// 包信息
  7. /// </summary>
  8. public struct Info
  9. {
  10. /// <summary>
  11. /// 包名称
  12. /// </summary>
  13. public readonly string Name;
  14. /// <summary>
  15. /// 作者信息
  16. /// </summary>
  17. public readonly string AuthorInfo;
  18. /// <summary>
  19. /// 版本信息
  20. /// </summary>
  21. public readonly Version VersionInfo;
  22. public Info(string name, string author, string version)
  23. {
  24. Name = name;
  25. AuthorInfo = author;
  26. if (!Version.TryParse(version, out VersionInfo))
  27. VersionInfo = new Version();
  28. }
  29. /// <summary>
  30. /// 判断本信息能否满足 <paramref name="target"/> 的版本要求
  31. /// </summary>
  32. /// <param name="target">依赖项信息</param>
  33. public readonly bool IsCompatibleWith(DependencyInfo target)
  34. {
  35. return Content.IsCompatibleWith(VersionInfo, target.Target.VersionInfo,
  36. (target.Flags & DependencyInfo.FlagsEnum.Strict) != 0 ? 1 : 0);
  37. }
  38. public override string ToString() => $"{Name}_{AuthorInfo}_{VersionInfo}";
  39. }
  40. /// <summary>
  41. /// 包依赖信息
  42. /// </summary>
  43. public struct DependencyInfo
  44. {
  45. /// <summary>
  46. /// 依赖目标
  47. /// </summary>
  48. public readonly Info Target;
  49. /// <summary>
  50. /// 依赖属性
  51. /// </summary>
  52. public readonly FlagsEnum Flags;
  53. /// <summary>
  54. /// 依赖项属性
  55. /// </summary>
  56. [Flags]
  57. public enum FlagsEnum
  58. {
  59. /// <summary>
  60. /// 无属性
  61. /// </summary>
  62. None,
  63. /// <summary>
  64. /// 非必须依赖项
  65. /// </summary>
  66. Unnecessary,
  67. /// <summary>
  68. /// 严格(次版本号)兼容依赖项
  69. /// </summary>
  70. Strict
  71. }
  72. public DependencyInfo(Info target, FlagsEnum flags = FlagsEnum.None)
  73. {
  74. Target = target;
  75. Flags = flags;
  76. }
  77. }
  78. }