namespace GFramework.Core.Abstractions.Pause;
///
/// 暂停令牌,唯一标识一个暂停请求
///
public readonly struct PauseToken : IEquatable
{
///
/// 令牌 ID
///
public Guid Id { get; }
///
/// 是否为有效令牌
///
public bool IsValid => Id != Guid.Empty;
///
/// 创建暂停令牌
///
/// 令牌 ID,用于唯一标识暂停请求
public PauseToken(Guid id)
{
Id = id;
}
///
/// 创建无效令牌
///
/// 返回一个 ID 为 Guid.Empty 的无效暂停令牌
public static PauseToken Invalid => new(Guid.Empty);
///
/// 判断当前令牌是否与另一个令牌相等
///
/// 要比较的另一个暂停令牌
/// 如果两个令牌的 ID 相同则返回 true,否则返回 false
public bool Equals(PauseToken other) => Id.Equals(other.Id);
///
/// 判断当前对象是否为暂停令牌类型并与其相等
///
/// 要比较的对象
/// 如果对象是 PauseToken 类型且 ID 相同则返回 true,否则返回 false
public override bool Equals(object? obj) => obj is PauseToken other && Equals(other);
///
/// 获取令牌的哈希码
///
/// 基于令牌 ID 计算的哈希值
public override int GetHashCode() => Id.GetHashCode();
///
/// 重载等于运算符,判断两个暂停令牌是否相等
///
/// 左侧暂停令牌
/// 右侧暂停令牌
/// 如果两个令牌相等则返回 true,否则返回 false
public static bool operator ==(PauseToken left, PauseToken right) => left.Equals(right);
///
/// 重载不等于运算符,判断两个暂停令牌是否不相等
///
/// 左侧暂停令牌
/// 右侧暂停令牌
/// 如果两个令牌不相等则返回 true,否则返回 false
public static bool operator !=(PauseToken left, PauseToken right) => !left.Equals(right);
///
/// 将暂停令牌转换为字符串表示形式
///
/// 包含令牌 ID 信息的字符串
public override string ToString() => $"PauseToken({Id})";
}