// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\r
// SPDX-License-Identifier: Apache-2.0
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using AWS.Deploy.Common.Extensions;
namespace AWS.Deploy.Common.Recipes.Validation
{
///
/// The validator is used to enforce that a particular OptionSettingItem has a value before deployment.
///
public class RequiredValidator : IOptionSettingItemValidator
{
private static readonly string defaultValidationFailedMessage = "The option setting '{{OptionSetting}}' can not be empty. Please select a valid value.";
public string ValidationFailedMessage { get; set; } = defaultValidationFailedMessage;
public Task Validate(object input, Recommendation recommendation, OptionSettingItem optionSettingItem)
{
var message = ValidationFailedMessage.Replace("{{OptionSetting}}", optionSettingItem.Name);
if (input?.TryDeserialize>(out var inputList) ?? false && inputList != null)
{
return Task.FromResult(new()
{
IsValid = inputList!.Any(),
ValidationFailedMessage = message
});
}
return Task.FromResult(new()
{
IsValid = !string.IsNullOrEmpty(input?.ToString()),
ValidationFailedMessage = message
});
}
}
}