private static void ToFriendlyStringImpl()

in src/Epam.GraphQL/Extensions/DictionaryExtensions.cs [179:260]


        private static void ToFriendlyStringImpl(object? obj, StringBuilder builder, int indent)
        {
            if (obj == null)
            {
                builder.Append("null");
                return;
            }

            if (obj is IReadOnlyDictionary<string, object?> dictionary)
            {
                builder.AppendLine("{");

                var first = true;
                foreach (var kv in dictionary)
                {
                    if (!first)
                    {
                        builder.AppendLine(",");
                    }

                    first = false;
                    builder.Append(' ', indent + 4);
                    builder.Append(kv.Key.ToJsonString());
                    builder.Append(": ");
                    ToFriendlyStringImpl(kv.Value, builder, indent + 4);
                }

                if (dictionary.Count != 0)
                {
                    builder.AppendLine();
                }

                builder.Append(' ', indent);
                builder.Append('}');

                return;
            }

            if (obj is IEnumerable<object> enumerable)
            {
                builder.Append('[');

                var first = true;
                foreach (var item in enumerable)
                {
                    if (!first)
                    {
                        builder.Append(", ");
                    }

                    first = false;
                    ToFriendlyStringImpl(item, builder, indent);
                }

                builder.Append(']');

                return;
            }

            if (obj is string str)
            {
                builder.Append(str.ToJsonString());

                return;
            }

            if (obj is DateTime dateTime)
            {
                builder.Append(dateTime.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK", DateTimeFormatInfo.InvariantInfo).ToJsonString());

                return;
            }

            if (obj is bool boolean)
            {
                builder.Append(boolean ? "true" : "false");

                return;
            }

            builder.Append(obj.ToString());
        }