LaunchArgument handler(string,string)

This commit is contained in:
Timerix22 2023-03-22 03:08:56 +06:00
parent a4014c0b7f
commit 48eab00a37
3 changed files with 59 additions and 21 deletions

View File

@ -5,9 +5,12 @@ public class LaunchArgument
{ {
public string[] Aliases; public string[] Aliases;
public string Description; public string Description;
public string? ParamName; protected string? ParamName1;
protected string? ParamName2;
public Action? Handler; public Action? Handler;
public Action<string>? HandlerWithArg; public Action<string>? HandlerWithArg1;
public Action<string, string>? HandlerWithArg2;
public int RequiredArgsCount;
public int Priority; public int Priority;
private LaunchArgument(string[] aliases, string description, int priority) private LaunchArgument(string[] aliases, string description, int priority)
@ -16,15 +19,31 @@ public class LaunchArgument
Description = description; Description = description;
Priority = priority; Priority = priority;
} }
public LaunchArgument(string[] aliases, string description, Action handler, int priority=0)
: this(aliases, description, priority) => Handler = handler;
public LaunchArgument(string[] aliases, string description, Action<string> handler, string paramName, int priority=0) public LaunchArgument(string[] aliases, string description,
Action handler, int priority = 0)
: this(aliases, description, priority) : this(aliases, description, priority)
{ {
HandlerWithArg = handler; Handler = handler;
ParamName = paramName; RequiredArgsCount = 0;
}
public LaunchArgument(string[] aliases, string description,
Action<string> handler, string paramName1, int priority=0)
: this(aliases, description, priority)
{
HandlerWithArg1 = handler;
ParamName1 = paramName1;
RequiredArgsCount = 1;
}
public LaunchArgument(string[] aliases, string description,
Action<string, string> handler, string paramName1, string paramName2, int priority=0)
: this(aliases, description, priority)
{
HandlerWithArg2 = handler;
ParamName1 = paramName1;
ParamName2 = paramName2;
RequiredArgsCount = 2;
} }
public StringBuilder AppendHelpInfo(StringBuilder b) public StringBuilder AppendHelpInfo(StringBuilder b)
@ -32,12 +51,14 @@ public class LaunchArgument
b.Append(Aliases[0]); b.Append(Aliases[0]);
for (int i = 1; i < Aliases.Length; i++) for (int i = 1; i < Aliases.Length; i++)
b.Append(", ").Append(Aliases[i]); b.Append(", ").Append(Aliases[i]);
if (!String.IsNullOrEmpty(ParamName)) if (!string.IsNullOrEmpty(ParamName1))
b.Append(" [").Append(ParamName).Append(']'); b.Append(" [").Append(ParamName1).Append("] ");
b.Append(" - ").Append(Description); if (!string.IsNullOrEmpty(ParamName2))
b.Append(" [").Append(ParamName2).Append("] ");
b.Append("- ").Append(Description);
return b; return b;
} }
public override string ToString() => public override string ToString() =>
$"{{{{{Aliases.MergeToString(", ")}}}, Handler: {Handler is null}, HandlerWithArg: {HandlerWithArg is null}}}"; $"{{{{{Aliases.MergeToString(", ")}}}, Handler: {Handler is null}, HandlerWithArg: {HandlerWithArg1 is null}}}";
} }

View File

@ -103,16 +103,33 @@ public class LaunchArgumentParser
{ {
LaunchArgument arg = Parse(args[i]); LaunchArgument arg = Parse(args[i]);
if (arg.HandlerWithArg is not null) switch (arg.RequiredArgsCount)
{ {
if (i+1 >= args.Length) case 0:
throw new Exception($"argument <{args[i]}> should have a parameter after it"); if (arg.Handler is null)
i++; // next arg throw new NullReferenceException($"argument <{args[i]}> hasn't got any handlers");
var i1 = i; break;
arg.Handler = () => arg.HandlerWithArg(args[i1]); case 1:
{
if (arg.HandlerWithArg1 is null)
throw new NullReferenceException($"argument <{args[i]}> hasn't got any handlers");
if (i + 1 >= args.Length)
throw new Exception($"argument <{args[i]}> should have a parameter after it");
string arg1 = args[++i];
arg.Handler = () => arg.HandlerWithArg1(arg1);
break;
}
case 2:
{
if (arg.HandlerWithArg2 is null)
throw new NullReferenceException($"argument <{args[i]}> hasn't got any handlers");
if (i + 2 >= args.Length)
throw new Exception($"argument <{args[i]}> should have two params after it");
string arg1 = args[++i], arg2 = args[++i];
arg.Handler = () => arg.HandlerWithArg2(arg1, arg2);
break;
}
} }
else if (arg.Handler is null) throw new NullReferenceException($"argument <{args[i]}> hasn't got any handlers");
execQueue.Add(arg); execQueue.Add(arg);
} }

View File

@ -2,7 +2,7 @@
<PropertyGroup> <PropertyGroup>
<!--package info--> <!--package info-->
<PackageId>DTLib</PackageId> <PackageId>DTLib</PackageId>
<Version>1.1.7</Version> <Version>1.1.8</Version>
<Authors>Timerix</Authors> <Authors>Timerix</Authors>
<Description>Library for all my C# projects</Description> <Description>Library for all my C# projects</Description>
<RepositoryType>GIT</RepositoryType> <RepositoryType>GIT</RepositoryType>