private static void ProcessJsonServerlessTemplate()

in Tools/LambdaTestTool/src/Amazon.Lambda.TestTool/Runtime/LambdaDefaultsConfigFileParser.cs [300:369]


        private static void ProcessJsonServerlessTemplate(LambdaConfigInfo configInfo, string content)
        {
            var rootData = JsonDocument.Parse(content);

            JsonElement resourcesNode;
            if (!rootData.RootElement.TryGetProperty("Resources", out resourcesNode))
                return;

            foreach (var resourceProperty in resourcesNode.EnumerateObject())
            {
                var resource = resourceProperty.Value;

                JsonElement typeProperty;
                if (!resource.TryGetProperty("Type", out typeProperty))
                    continue;

                var type = typeProperty.GetString();

                JsonElement propertiesProperty;
                if (!resource.TryGetProperty("Properties", out propertiesProperty))
                    continue;


                if (!string.Equals("AWS::Serverless::Function", type, StringComparison.Ordinal) &&
                    !string.Equals("AWS::Lambda::Function", type, StringComparison.Ordinal))
                {
                    continue;
                }

                string handler = null;
                if (propertiesProperty.TryGetProperty("Handler", out var handlerProperty))
                {
                    handler = handlerProperty.GetString();
                }
                else if(propertiesProperty.TryGetProperty("ImageConfig", out var imageConfigProperty) &&
                        imageConfigProperty.TryGetProperty("Command", out var imageCommandProperty))
                {
                    if(imageCommandProperty.GetArrayLength() > 0)
                    {
                        // Grab the first element assuming that is the function handler.
                        var en = imageCommandProperty.EnumerateArray();
                        en.MoveNext();
                        handler = en.Current.GetString();
                    }
                }

                if (!string.IsNullOrEmpty(handler))
                {
                    var functionInfo = new LambdaFunctionInfo
                    {
                        Name = resourceProperty.Name,
                        Handler = handler
                    };

                    if(propertiesProperty.TryGetProperty("Environment", out var environmentProperty) && 
                        environmentProperty.TryGetProperty("Variables", out var variablesProperty))
                    {
                        foreach(var property in variablesProperty.EnumerateObject())
                        {
                            if(property.Value.ValueKind == JsonValueKind.String)
                            {
                                functionInfo.EnvironmentVariables[property.Name] = property.Value.GetString();
                            }
                        }
                    }

                    configInfo.FunctionInfos.Add(functionInfo);
                }
            }
        }