namespace ZB.MOM.WW.ScadaBridge.DelmiaNotifier; /// Outcome of parsing the command line: success carries the payload, failure carries a human reason. internal sealed record ParseResult(bool Ok, RecipeDownload? Payload, string? Error) { /// Builds a successful parse result carrying the parsed payload. /// The successfully parsed recipe download payload. /// A with set to true. public static ParseResult Success(RecipeDownload payload) => new(true, payload, null); /// Builds a failed parse result carrying a human-readable reason. /// The human-readable failure reason. /// A with set to false. public static ParseResult Fail(string error) => new(false, null, error); } /// /// Hand-rolled, reflection-free parser for the legacy WWNotifier flags. Each flag takes one value /// (short or long form). The four required flags must be present; the two optional flags may be omitted. /// internal static class ArgParser { /// Parses the legacy WWNotifier command-line flags into a payload. /// The raw command-line arguments. /// A successful with the parsed payload, or a failed one with the reason. public static ParseResult Parse(string[] args) { var payload = new RecipeDownload(); for (var i = 0; i < args.Length; i++) { var flag = args[i]; if (i + 1 >= args.Length) { return ParseResult.Fail($"missing value for flag '{flag}'"); } var value = args[++i]; switch (flag) { case "-m" or "--machine": payload.MachineCode = value; break; case "-d" or "--downloadpath": payload.DownloadPath = value; break; case "-w" or "--workorder": payload.WorkOrderNumber = value; break; case "-p" or "--partnumber": payload.PartNumber = value; break; case "-s" or "--seqop": payload.JobStepNumber = value; break; case "-u" or "--username": payload.Username = value; break; default: return ParseResult.Fail($"unknown flag '{flag}'"); } } if (string.IsNullOrEmpty(payload.MachineCode)) { return ParseResult.Fail("missing required flag -m/--machine"); } if (string.IsNullOrEmpty(payload.DownloadPath)) { return ParseResult.Fail("missing required flag -d/--downloadpath"); } if (string.IsNullOrEmpty(payload.WorkOrderNumber)) { return ParseResult.Fail("missing required flag -w/--workorder"); } if (string.IsNullOrEmpty(payload.PartNumber)) { return ParseResult.Fail("missing required flag -p/--partnumber"); } return ParseResult.Success(payload); } }