private IResource MapResource()

in src/PSRule/Common/JsonConverters.cs [401:486]


        private IResource MapResource(JsonReader reader, JsonSerializer serializer)
        {
            if (reader.TokenType != JsonToken.StartObject || !reader.Read())
            {
                throw new PipelineSerializationException(PSRuleResources.ReadJsonFailed);
            }

            IResource result = null;
            string apiVersion = null;
            string kind = null;
            ResourceMetadata metadata = null;
            CommentMetadata comment = null;

            while (reader.TokenType != JsonToken.EndObject)
            {
                if (reader.TokenType == JsonToken.PropertyName)
                {
                    var propertyName = reader.Value.ToString();

                    // Read apiVersion
                    if (TryApiVersion(reader: reader, propertyName: propertyName, apiVersion: out var apiVersionValue))
                    {
                        apiVersion = apiVersionValue;
                    }

                    // Read kind
                    else if (TryKind(reader: reader, propertyName: propertyName, kind: out var kindValue))
                    {
                        kind = kindValue;
                    }

                    // Read metadata
                    else if (TryMetadata(
                        reader: reader,
                        serializer: serializer,
                        propertyName: propertyName,
                        metadata: out var metadataValue))
                    {
                        metadata = metadataValue;
                    }

                    // Try Spec
                    else if (kind != null && TrySpec(
                        reader: reader,
                        serializer: serializer,
                        propertyName: propertyName,
                        apiVersion: apiVersion,
                        kind: kind,
                        metadata: metadata,
                        comment: comment,
                        spec: out var specValue))
                    {
                        result = specValue;

                        // Break out of loop if result is populated
                        // Needed so we don't read more than we have to
                        if (result != null && reader.TokenType == JsonToken.EndObject)
                        {
                            break;
                        }
                    }

                    else
                    {
                        reader.Skip();
                    }
                }

                else if (reader.TokenType == JsonToken.Comment)
                {
                    var commentLine = reader.Value.ToString().TrimStart();

                    if (commentLine.Length > FIELD_SYNOPSIS.Length && commentLine.StartsWith(FIELD_SYNOPSIS))
                    {
                        comment = new CommentMetadata
                        {
                            Synopsis = commentLine.Substring(FIELD_SYNOPSIS.Length)
                        };
                    }
                }

                reader.Read();
            }

            return result;
        }