public ITypelessCommandBuilder WithArgument <TParser, TArgument, TParserProperties>(string name, TParser parser, TParserProperties?properties = null, Action <ITypelessCommandBuilder>?argument = null) where TParser : IArgumentParser <TArgument, TParserProperties> where TArgument : notnull where TParserProperties : struct { var builder = new TypelessArgumentCommandBuilder <TParser, TArgument, TParserProperties>(name, parser, properties); if (argument is not null) { argument(builder); } _children.Add(builder.Build()); return(this); }
TParser3, TArgument3, TParserProperties3, TParser4, TArgument4, TParserProperties4> WithArgument < TParser, TArgument, TParserProperties>(string name, TParser parser, TParserProperties?properties = null, Action <ITypelessCommandBuilder>?argument = null) where TParser : IArgumentParser <TArgument, TParserProperties> where TArgument : notnull where TParserProperties : struct { // if we exceed 4 parameters, no type safety for you! var builder = new TypelessArgumentCommandBuilder <TParser, TArgument, TParserProperties>(name, parser, properties); if (argument is not null) { argument(builder); } _children.Add(builder.Build()); return(this); }