protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            var validated = InputValidator.Versions(value);

            if (validated.IsValid)
            {
                return(ValidationResult.Success);
            }
            else
            {
                return(new ValidationResult(validated.ErrorMessage, new[] { validationContext.MemberName }));
            }
        }
        public FindBestVersionMatchOutput FindBestVersionMatch(FindBestVersionMatchInput input)
        {
            var output = new FindBestVersionMatchOutput
            {
                InputStatus = InputStatus.Missing,
                Input       = input,
            };

            if (input == null)
            {
                return(output);
            }

            var validatedVersionRange = InputValidator.VersionRange(input.VersionRange);
            var validatedVersions     = InputValidator.Versions(input.Versions);

            if (validatedVersionRange.IsMissing || validatedVersions.IsMissing)
            {
                return(output);
            }

            if (validatedVersionRange.IsInvalid || validatedVersions.IsInvalid)
            {
                output.InputStatus = InputStatus.Invalid;
                return(output);
            }

            output.InputStatus = InputStatus.Valid;
            output.Result      = GetBestVersionMatch(
                validatedVersionRange.Data,
                validatedVersions.Data,
                listed: null,
                showUnlisted: true);

            return(output);
        }