private void ProcessNodeObject(JToken jt, object nodeObject, string fullName) { foreach (var prop in nodeObject.GetType().GetProperties()) { var attributes = prop.GetCustomAttributes(false); if (attributes.FirstOrDefault(i => i is ArmParameterAttribute) is ArmParameterAttribute armParamAttribute) { var jsonName = prop.GetJsonPropertyName(); var parameterName = string.IsNullOrEmpty(armParamAttribute.Name) ? $"{fullName}_{jsonName}" : armParamAttribute.Name; var type = armParamAttribute.Type; var armParam = new ArmParameter { Name = parameterName, Properties = new ArmParameterProperties { DefaultValue = prop.GetValue(nodeObject).GetDefaultPropertyValue(type, armParamAttribute.RemoveBrackets), Type = type } }; ReplacePropertyWithParameter(jt, armParam, parameterName, jsonName); } else if (attributes.Any(i => i is JsonPropertyAttribute)) { var nextNode = prop.GetValue(nodeObject); var jsonName = prop.GetJsonPropertyName(); ProcessNodeElement(jt[jsonName], nextNode, $"{fullName}_{jsonName}"); } } }
private void ReplacePropertyWithParameter(JToken jt, ArmParameter armParam, string parameterName, string jsonName) { switch (jt[jsonName]) { case JValue jvalue: jvalue.Value = $"[parameters('{parameterName}')]"; break; case JProperty jprop: jprop.Value = $"[parameters('{parameterName}')]"; break; case JArray jarray: var arrayParent = jarray.Parent; arrayParent.Replace(new JProperty(jsonName, $"[parameters('{parameterName}')]")); break; case JObject jo: var objectParent = jo.Parent; objectParent.Replace(new JProperty(jsonName, $"[parameters('{parameterName}')]")); break; case null: ((JObject)jt).Add(new JProperty(jsonName, $"[parameters('{parameterName}')]")); break; } if (_parameters.All(i => i.Name != armParam.Name)) { _parameters.Add(armParam); } }
public object VisitParameterDeclaration(ArmParameter parameter) { WriteAllowedValues(parameter.AllowedValues); WriteParameterType(parameter.Type.CoerceToLiteral()); WriteVariable(parameter.Name.CoerceToString()); WriteDefaultValue(parameter.DefaultValue); return(null); }
VisitAction IArmVisitor <VisitAction> .VisitParameterDeclaration(ArmParameter parameter) { if (ShouldStop(VisitParameterDeclaration(parameter), out VisitAction parentAction)) { return(parentAction); } if (VisitDictionaryAndCheckStop(parameter, out parentAction)) { return(parentAction); } return(VisitAction.Continue); }
private ArmParameter ReadTypedParameter <T>(string parameterName, JObject parameterObject) { var parameter = new ArmParameter <T>(new ArmStringLiteral(parameterName)); if (parameterObject.TryGetValue("defaultValue", out JToken defaultValue)) { parameter.DefaultValue = ReadValue(defaultValue); } if (parameterObject.TryGetValue("allowedValues", out JToken allowedValues)) { parameter.AllowedValues = ReadArmArray((JArray)allowedValues); } return(parameter); }
public virtual VisitAction VisitParameterDeclaration(ArmParameter parameter) => DefaultVisit(parameter);
public object VisitParameterDeclaration(ArmParameter parameter) { throw CreateInvalidException(parameter); }
public JToken VisitParameterDeclaration(ArmParameter parameter) => VisitObject(parameter);