internal static string GetArgumentsString()

in src/StreamJsonRpc/JsonRpcEventSource.cs [280:361]


        internal static string GetArgumentsString(JsonRpcRequest request)
        {
            const int maxLength = 128;

            if (request.ArgumentCount == 0)
            {
                return "[]";
            }

            if (request.ArgumentNames is null)
            {
                var stringBuilder = new StringBuilder();
                stringBuilder.Append('[');
                for (int i = 0; i < request.ArgumentCount; ++i)
                {
                    if (request.TryGetArgumentByNameOrIndex(null, i, null, out object? value))
                    {
                        Format(stringBuilder, value);
                        stringBuilder.Append(", ");
                    }
                    else
                    {
                        stringBuilder.Append("<unformattable>");
                    }

                    if (stringBuilder.Length > maxLength)
                    {
                        return $"{stringBuilder.ToString(0, maxLength)}...(truncated)";
                    }
                }

                stringBuilder.Length -= 2; // Trim trailing comma
                stringBuilder.Append(']');
                return stringBuilder.ToString();
            }
            else
            {
                var stringBuilder = new StringBuilder();
                stringBuilder.Append('{');
                foreach (string key in request.ArgumentNames)
                {
                    if (request.TryGetArgumentByNameOrIndex(key, -1, null, out object? value))
                    {
                        stringBuilder.Append(key);
                        stringBuilder.Append(": ");
                        Format(stringBuilder, value);
                        stringBuilder.Append(", ");
                    }
                    else
                    {
                        stringBuilder.Append("<unformattable>");
                    }

                    if (stringBuilder.Length > maxLength)
                    {
                        return $"{stringBuilder.ToString(0, maxLength)}...(truncated)";
                    }
                }

                stringBuilder.Length -= 2; // Trim trailing comma
                stringBuilder.Append('}');
                return stringBuilder.ToString();
            }

            static void Format(StringBuilder builder, object? value)
            {
                switch (value)
                {
                    case null:
                        builder.Append("null");
                        break;
                    case string s:
                        builder.Append("\"");
                        builder.Append(s);
                        builder.Append("\"");
                        break;
                    default:
                        builder.Append(value);
                        break;
                }
            }
        }