using System.Text.Json.Serialization; using Fleet.Core; namespace MoShiro.Protocol; [JsonConverter(typeof(TaskIdJsonConverter))] public readonly record struct TaskId(string Value) { public const string Prefix = "tsk"; public override string ToString() => Value; } [JsonConverter(typeof(TestIdJsonConverter))] public readonly record struct TestId(string Value) { public const string Prefix = "tst"; public override string ToString() => Value; } /// 原始块 ID(UUIDv7,同时是发件箱的 msg_id)。 [JsonConverter(typeof(ChunkIdJsonConverter))] public readonly record struct ChunkId(Guid Value) { public static ChunkId New(TimeProvider time) => new(Guid.CreateVersion7(time.GetUtcNow())); public override string ToString() => Value.ToString(); } public static class AgentIds { /// Agent 就是 Fleet 节点,ID 前缀为 agt。 public const string Prefix = "agt"; } public sealed class TaskIdJsonConverter : StringIdJsonConverter { protected override TaskId Create(string value) => new(value); protected override string GetValue(TaskId id) => id.Value; } public sealed class TestIdJsonConverter : StringIdJsonConverter { protected override TestId Create(string value) => new(value); protected override string GetValue(TestId id) => id.Value; } public sealed class ChunkIdJsonConverter : StringIdJsonConverter { protected override ChunkId Create(string value) => new(Guid.Parse(value)); protected override string GetValue(ChunkId id) => id.Value.ToString(); }