in src/AWS.Deploy.Common/Recipes/OptionSettingItem.ValueOverride.cs [97:147]
public void SetValueOverride(object valueOverride)
{
var isValid = true;
var validationFailedMessage = string.Empty;
foreach (var validator in this.BuildValidators())
{
var result = validator.Validate(valueOverride);
if (!result.IsValid)
{
isValid = false;
validationFailedMessage += result.ValidationFailedMessage + Environment.NewLine;
}
}
if (!isValid)
throw new ValidationFailedException(DeployToolErrorCode.OptionSettingItemValueValidationFailed, validationFailedMessage.Trim());
if (AllowedValues != null && AllowedValues.Count > 0 && valueOverride != null &&
!AllowedValues.Contains(valueOverride.ToString() ?? ""))
throw new InvalidOverrideValueException(DeployToolErrorCode.InvalidValueForOptionSettingItem, $"Invalid value for option setting item '{Name}'");
if (valueOverride is bool || valueOverride is int || valueOverride is long || valueOverride is double || valueOverride is Dictionary<string, string>)
{
_valueOverride = valueOverride;
}
else if (valueOverride is string valueOverrideString)
{
if (bool.TryParse(valueOverrideString, out var valueOverrideBool))
{
_valueOverride = valueOverrideBool;
}
else if (int.TryParse(valueOverrideString, out var valueOverrideInt))
{
_valueOverride = valueOverrideInt;
}
else
{
_valueOverride = valueOverrideString;
}
}
else
{
var deserialized = JsonConvert.DeserializeObject<Dictionary<string, object>>(JsonConvert.SerializeObject(valueOverride));
foreach (var childOptionSetting in ChildOptionSettings)
{
if (deserialized.TryGetValue(childOptionSetting.Id, out var childValueOverride))
{
childOptionSetting.SetValueOverride(childValueOverride);
}
}
}
}