private static bool ProcessActivityEvent(ref PooledListState <JaegerLog> state, ActivityEvent e)
        {
            if (!state.Created)
            {
                state.List = PooledList <JaegerLog> .Create();

                state.Created = true;
            }

            PooledList <JaegerLog> .Add(ref state.List, e.ToJaegerLog());

            return(true);
        }
        private static bool ProcessActivityLink(ref PooledListState <JaegerSpanRef> state, ActivityLink link)
        {
            if (!state.Created)
            {
                state.List = PooledList <JaegerSpanRef> .Create();

                state.Created = true;
            }

            PooledList <JaegerSpanRef> .Add(ref state.List, link.ToJaegerSpanRef());

            return(true);
        }
        public static PooledList <JaegerLog> ToJaegerLogs(this IEnumerable <ActivityEvent> events)
        {
            PooledListState <JaegerLog> logs = default;

            if (events == null)
            {
                return(logs.List);
            }

            ListEnumerator <ActivityEvent, PooledListState <JaegerLog> > .AllocationFreeForEach(
                events,
                ref logs,
                ProcessActivityEventRef);

            return(logs.List);
        }
        public static PooledList <JaegerSpanRef> ToJaegerSpanRefs(this IEnumerable <ActivityLink> links)
        {
            PooledListState <JaegerSpanRef> references = default;

            if (links == null)
            {
                return(references.List);
            }

            ListEnumerator <ActivityLink, PooledListState <JaegerSpanRef> > .AllocationFreeForEach(
                links,
                ref references,
                ProcessActivityLinkRef);

            return(references.List);
        }
        public static JaegerLog ToJaegerLog(this Event timedEvent)
        {
            var tags = new PooledListState <JaegerTag>
            {
                Created = true,
                List    = PooledList <JaegerTag> .Create(),
            };

            DictionaryEnumerator <string, object, PooledListState <JaegerTag> > .AllocationFreeForEach(
                timedEvent.Attributes,
                ref tags,
                ProcessTagRef);

            // Matches what OpenTracing and OpenTelemetry defines as the event name.
            // https://github.com/opentracing/specification/blob/master/semantic_conventions.md#log-fields-table
            // https://github.com/open-telemetry/opentelemetry-specification/pull/397/files
            PooledList <JaegerTag> .Add(ref tags.List, new JaegerTag("message", JaegerTagType.STRING, vStr : timedEvent.Name));

            return(new JaegerLog(timedEvent.Timestamp.ToEpochMicroseconds(), tags.List));
        }
        private static bool ProcessTag(ref PooledListState <JaegerTag> state, KeyValuePair <string, object> attribute)
        {
            PooledList <JaegerTag> .Add(ref state.List, attribute.ToJaegerTag());

            return(true);
        }