in src/AWS.Deploy.Common/Recipes/OptionSettingItem.ValueOverride.cs [98:180]
public async Task SetValue(IOptionSettingHandler optionSettingHandler, object valueOverride, IOptionSettingItemValidator[] validators, Recommendation recommendation, bool skipValidation)
{
if (!skipValidation)
{
foreach (var validator in validators)
{
var result = await validator.Validate(valueOverride, recommendation, this);
if (!result.IsValid)
{
Validation.ValidationStatus = ValidationStatus.Invalid;
Validation.ValidationMessage = result.ValidationFailedMessage?.Trim() ?? $"The value '{valueOverride}' is invalid for option setting '{Name}'.";
Validation.InvalidValue = valueOverride;
throw new ValidationFailedException(DeployToolErrorCode.OptionSettingItemValueValidationFailed, Validation.ValidationMessage);
}
}
}
if (AllowedValues != null && AllowedValues.Count > 0 && valueOverride != null &&
!AllowedValues.Contains(valueOverride.ToString() ?? ""))
{
Validation.ValidationStatus = ValidationStatus.Invalid;
Validation.ValidationMessage = $"Invalid value for option setting item '{Name}'";
Validation.InvalidValue = valueOverride;
throw new InvalidOverrideValueException(DeployToolErrorCode.InvalidValueForOptionSettingItem, Validation.ValidationMessage);
}
Validation.ValidationStatus = ValidationStatus.Valid;
Validation.ValidationMessage = string.Empty;
Validation.InvalidValue = null;
try
{
if (valueOverride is bool || valueOverride is int || valueOverride is long || valueOverride is double || valueOverride is Dictionary<string, string> || valueOverride is SortedSet<string>)
{
_value = valueOverride;
}
else if (Type.Equals(OptionSettingValueType.KeyValue))
{
var deserialized = JsonConvert.DeserializeObject<Dictionary<string, string>>(valueOverride?.ToString() ?? "");
_value = deserialized;
}
else if (Type.Equals(OptionSettingValueType.List))
{
var deserialized = JsonConvert.DeserializeObject<SortedSet<string>>(valueOverride?.ToString() ?? "");
_value = deserialized;
}
else if (valueOverride is string valueOverrideString)
{
if (bool.TryParse(valueOverrideString, out var valueOverrideBool))
{
_value = valueOverrideBool;
}
else if (int.TryParse(valueOverrideString, out var valueOverrideInt))
{
_value = valueOverrideInt;
}
else
{
_value = 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) ?? false)
{
await optionSettingHandler.SetOptionSettingValue(recommendation, childOptionSetting, childValueOverride, skipValidation: skipValidation);
}
}
}
}
catch (JsonReaderException ex)
{
Validation.ValidationStatus = ValidationStatus.Invalid;
Validation.ValidationMessage = $"The value you are trying to set is invalid.";
Validation.InvalidValue = valueOverride;
throw new UnsupportedOptionSettingType(DeployToolErrorCode.UnsupportedOptionSettingType,
$"The value you are trying to set for the option setting '{Name}' is invalid.",
ex);
}
}