private LanguageExpression GetModuleNameExpression(ModuleSymbol moduleSymbol) { // this condition should have already been validated by the type checker var nameValueSyntax = moduleSymbol.SafeGetBodyPropertyValue(LanguageConstants.ResourceNamePropertyName) ?? throw new ArgumentException($"Expected module syntax body to contain property 'name'"); return(ConvertExpression(nameValueSyntax)); }
private void EmitModuleParameters(ModuleSymbol moduleSymbol) { var paramsValue = moduleSymbol.SafeGetBodyPropertyValue(LanguageConstants.ModuleParamsPropertyName); if (paramsValue is not ObjectSyntax paramsObjectSyntax) { // 'params' is optional if the module has no required params return; } writer.WritePropertyName("parameters"); writer.WriteStartObject(); foreach (var propertySyntax in paramsObjectSyntax.Properties) { if (!(propertySyntax.TryGetKeyText() is string keyName)) { // should have been caught by earlier validation throw new ArgumentException("Disallowed interpolation in module parameter"); } writer.WritePropertyName(keyName); { writer.WriteStartObject(); this.emitter.EmitProperty("value", propertySyntax.Value); writer.WriteEndObject(); } } writer.WriteEndObject(); }
private static void EmitModuleParameters(JsonTextWriter jsonWriter, ModuleSymbol moduleSymbol, ExpressionEmitter emitter) { var paramsValue = moduleSymbol.SafeGetBodyPropertyValue(LanguageConstants.ModuleParamsPropertyName); if (paramsValue is not ObjectSyntax paramsObjectSyntax) { // 'params' is optional if the module has no required params return; } jsonWriter.WritePropertyName("parameters"); jsonWriter.WriteStartObject(); foreach (var propertySyntax in paramsObjectSyntax.Properties) { if (!(propertySyntax.TryGetKeyText() is string keyName)) { // should have been caught by earlier validation throw new ArgumentException("Disallowed interpolation in module parameter"); } // we can't just call EmitObjectProperties here because the ObjectSyntax is flatter than the structure we're generating // because nested deployment parameters are objects with a single value property jsonWriter.WritePropertyName(keyName); jsonWriter.WriteStartObject(); if (propertySyntax.Value is ForSyntax @for) { // the value is a for-expression // write a single property copy loop emitter.EmitProperty("copy", () => { jsonWriter.WriteStartArray(); emitter.EmitCopyObject("value", @for, @for.Body, "value"); jsonWriter.WriteEndArray(); }); } else { // the value is not a for-expression - can emit normally emitter.EmitModuleParameterValue(propertySyntax.Value); } jsonWriter.WriteEndObject(); } jsonWriter.WriteEndObject(); }
public static SyntaxBase GetModuleNameSyntax(ModuleSymbol moduleSymbol) { // this condition should have already been validated by the type checker return(moduleSymbol.SafeGetBodyPropertyValue(LanguageConstants.ResourceNamePropertyName) ?? throw new ArgumentException($"Expected module syntax body to contain property 'name'")); }