public void EscapesCommasInKeys() { var target = new byte[9]; var tags = new Dictionary <string, string> { ["f,o"] = "abc" }; ActivityWriter.TryWriteTags(target.AsSpan(), tags, out int written); Assert.Equal(9, written); Assert.Equal(@",f\,o=abc", Encoding.UTF8.GetString(target)); }
public void WritesTwoKeyValuePairs() { var target = new byte[16]; var tags = new Dictionary <string, string> { ["foo"] = "bar", ["wib"] = "qux" }; ActivityWriter.TryWriteTags(target.AsSpan(), tags, out int written); Assert.Equal(16, written); Assert.Equal(",foo=bar,wib=qux", Encoding.UTF8.GetString(target)); }
public void EscapesEqualSignsInValues() { var target = new byte[9]; var tags = new Dictionary <string, string> { ["foo"] = "a=b" }; ActivityWriter.TryWriteTags(target.AsSpan(), tags, out int written); Assert.Equal(9, written); Assert.Equal(@",foo=a\=b", Encoding.UTF8.GetString(target)); }
public void WritesSimpleKeyValuePair() { var target = new byte[8]; var tags = new Dictionary <string, string> { ["foo"] = "bar" }; ActivityWriter.TryWriteTags(target.AsSpan(), tags, out int written); Assert.Equal(8, written); Assert.Equal(",foo=bar", Encoding.UTF8.GetString(target)); }
public bool Write(object?args, Activity?activity, Span <byte> span, out int bytesWritten) { if (span.Length == 0) { goto fail; } bytesWritten = 0; for (int i = 0; i < _tagCount; i++) { if (span.Length == 0) { goto fail; } if (!_tagFormatters[i].TryWrite(args !, span, true, out int tagWritten)) { goto fail; } span = span.Slice(tagWritten); bytesWritten += tagWritten; } if (activity != null) { if (!ActivityWriter.TryWriteTags(span, activity.Tags, out int tagsWritten)) { goto fail; } bytesWritten += tagsWritten; } span[0] = Space; span = span.Slice(1); bytesWritten++; bool comma = false; for (int i = 0; i < _fieldCount; i++) { if (span.Length == 0) { goto fail; } if (!_fieldFormatters[i].TryWrite(args !, span, comma, out int fieldWritten)) { goto fail; } span = span.Slice(fieldWritten); bytesWritten += fieldWritten; comma = comma || fieldWritten > 0; } if (activity != null && activity.Duration.Ticks > 0L) { if (!ActivityWriter.TryWriteDuration(span, activity.Duration, comma, out int durationWritten)) { goto fail; } bytesWritten += durationWritten; } return(true); fail: bytesWritten = 0; return(false); }