// Copyright Epic Games, Inc. All Rights Reserved. using System.ComponentModel; using EpicGames.Core; namespace EpicGames.Horde.Jobs { /// /// Identifier for a jobstep /// /// Id to construct from [LogValueType] [JsonSchemaString] [TypeConverter(typeof(SubResourceIdTypeConverter))] [SubResourceIdConverter(typeof(JobStepIdConverter))] public readonly record struct JobStepId(SubResourceId Id) { /// /// Constructor /// public JobStepId(ushort value) : this(new SubResourceId(value)) { } /// /// Creates a new /// public static JobStepId GenerateNewId() => new JobStepId(SubResourceId.GenerateNewId()); /// public static JobStepId Parse(string text) => new JobStepId(SubResourceId.Parse(text)); /// public static bool TryParse(string text, out JobStepId stepId) { if (SubResourceId.TryParse(text, out SubResourceId subResourceId)) { stepId = new JobStepId(subResourceId); return true; } else { stepId = default; return false; } } /// public override string ToString() => Id.ToString(); } /// /// Converter to and from instances. /// class JobStepIdConverter : SubResourceIdConverter { /// public override JobStepId FromSubResourceId(SubResourceId id) => new JobStepId(id); /// public override SubResourceId ToSubResourceId(JobStepId value) => value.Id; } }