public static IRequestRegistrationBuilder <TParameter> Required <TParameter>([NotNull] this IRequestRegistrationBuilder <TParameter> builder, bool required = true)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            builder.Required = required;

            return(builder);
        }
        public static IRequestRegistrationBuilder <TParameter> OnParsed <TParameter>([NotNull] this IRequestRegistrationBuilder <TParameter> builder, [CanBeNull] Action <TParameter> onParsed)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            builder.OnParsedCallback = onParsed;

            return(builder);
        }
        public static IRequestRegistrationBuilder <TParameter> FromQuery <TParameter>([NotNull] this IRequestRegistrationBuilder <TParameter> builder, [NotNull] string key)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }
            if (string.IsNullOrWhiteSpace(key))
            {
                throw new ArgumentException("Value cannot be null or whitespace.", nameof(key));
            }

            builder.TokenExtractors.Add(new QueryExtractor(key));

            return(builder);
        }
        public static IRequestRegistrationBuilder <TParameter> DefaultValue <TParameter>([NotNull] this IRequestRegistrationBuilder <TParameter> builder, [CanBeNull] TParameter defaultValue)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            builder.DefaultValue = defaultValue;

            return(builder);
        }
        public static IRequestRegistrationBuilder <TParameter> Validator <TParameter>([NotNull] this IRequestRegistrationBuilder <TParameter> builder, [CanBeNull] Func <TParameter, IEnumerable <ValidationError> > validator)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            builder.Validator = validator;

            return(builder);
        }
        public static IRequestRegistrationBuilder <TParameter> TryParser <TParameter>([NotNull] this IRequestRegistrationBuilder <TParameter> builder, [NotNull] TryParseDelegate <TParameter> tryParser)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }
            if (tryParser == null)
            {
                throw new ArgumentNullException(nameof(tryParser));
            }

            builder.TryParser = tryParser;

            return(builder);
        }