protected override Task<ValidationResult> Validate(Stream packageStream)
        {
            ValidationResult result = new ValidationResult();

            JObject apiapp = GetJObject(packageStream, ApiAppMetadata);

            if (apiapp == null)
            {
                result.Errors.Add(string.Format("required file '{0}' is missing from package", ApiAppMetadata));
            }
            else
            {
                result.PackageIdentity = ValidationHelpers.ValidateIdentity(apiapp, result.Errors);

                //CheckRequiredProperty(apiapp, errors, "description");
                ValidationHelpers.CheckRequiredProperty(apiapp, result.Errors, "title");
                ValidationHelpers.CheckRequiredProperty(apiapp, result.Errors, "summary");
                ValidationHelpers.CheckRequiredProperty(apiapp, result.Errors, "author");
                ValidationHelpers.CheckRequiredProperty(apiapp, result.Errors, "namespace");
            }

            //CheckRequiredFile(packageStream, result.Errors, "content/metadata/icons/small-icon.png");
            //CheckRequiredFile(packageStream, result.Errors, "content/metadata/icons/medium-icon.png");
            //CheckRequiredFile(packageStream, result.Errors, "content/metadata/icons/large-icon.png");
            //CheckRequiredFile(packageStream, result.Errors, "content/metadata/icons/hero-icon.png");
            //CheckRequiredFile(packageStream, result.Errors, "content/metadata/icons/wide-icon.png");

            return Task.FromResult(result);
        }
        /// <summary>
        /// Rejects the module if no PowerShell module manifest was present
        /// </summary>
        /// <param name="nupkgStream"></param>
        /// <returns></returns>
        protected override Task<ValidationResult> Validate(Stream nupkgStream)
        {
            ValidationResult result = new ValidationResult();

            if (!_wasPsd1Present)
            {
                result.Errors.Add("A psd1 PowerShell module manifest was missing.");
                return Task.FromResult<ValidationResult>(result);
            }

            if (_missingRequiredFields.Count > 0)
            {
                result.Errors.Add(string.Format("The psd1 PowerShell module manifest is missing required fields: {0}.", String.Join(", ", _missingRequiredFields)));
                return Task.FromResult<ValidationResult>(result);
            }

            result.PackageIdentity = new PackageIdentity
            {
                Namespace = "",
                Id = "",
                Version = SemanticVersion.Parse("0.0.0")
            };

            return Task.FromResult<ValidationResult>(result);
        }
        async Task<ValidationResult> Validate(Stream requestStream)
        {
            ValidationResult result = new ValidationResult();

            JObject metadata;
            using (StreamReader reader = new StreamReader(requestStream))
            {
                try
                {
                    metadata = JObject.Parse(await reader.ReadToEndAsync());
                    result.PackageIdentity = ValidationHelpers.ValidateIdentity(metadata, result.Errors);
                }
                catch (FormatException)
                {
                    result.Errors.Add("request could not be parsed as JSON");
                }
            }

            return result;
        }