/// <summary>
 /// Adds an option to the configuration.
 /// </summary>
 /// <param name="template">Template that identifies the option.</param>
 /// <param name="configureAction">Configuration action.</param>
 /// <typeparam name="TValue">Value type.</typeparam>
 /// <returns>Configuration.</returns>
 public CommandConfiguration <TOptions> Option <TValue>(string template,
                                                        Action <MultiValueArgumentConfiguration <TOptions, TValue> > configureAction)
 {
     return(ConfigureArgument <TValue>(template, builder => MultiValueArgumentConfiguration <TOptions, TValue>
                                       .Configure(builder, configureAction)
                                       .Option(Template.ForOptionOrSwitch(template))));
 }
        /// <summary>
        /// Adds a position argument to the configuration.
        /// </summary>
        /// <param name="configureAction">Configuration action.</param>
        /// <typeparam name="TValue">Value type.</typeparam>
        /// <returns>Configuration.</returns>
        public CommandConfiguration <TOptions> PositionArgument <TValue>(
            Action <MultiValueArgumentConfiguration <TOptions, TValue> > configureAction)
        {
            var index = ParserConfig.GetNextArgumentIdentity();

            return(ConfigureArgument <TValue>(Common.FormatArgumentContext(index),
                                              builder => MultiValueArgumentConfiguration <TOptions, TValue>
                                              .Configure(builder, configureAction)
                                              .PositionArgument(index)));
        }