internal void WriteExtensionMembers()

in src/Microsoft.Azure.SignalR.Protocols/ServiceMessage.cs [96:166]


        internal void WriteExtensionMembers(ref MessagePackWriter writer)
        {
            int count = 0;
            var tracingId = (this as IMessageWithTracingId)?.TracingId;
            if (tracingId != null)
            {
                count++;
            }
            var ttl = (this as IHasTtl)?.Ttl;
            if (ttl != null)
            {
                count++;
            }
            var protocol = (this as IHasProtocol)?.Protocol;
            if (protocol != null)
            {
                count++;
            }

            var filter = (this as IHasSubscriberFilter)?.Filter;
            if (filter != null)
            {
                count++;
            }

            var dataMessageType = (this as IHasDataMessageType)?.Type ?? default;
            if (dataMessageType != default)
            {
                count++;
            }

            var isPartial = (this as IPartializable)?.IsPartial ?? false;
            if (isPartial)
            {
                count++;
            }

            // todo : count more optional fields.
            writer.WriteMapHeader(count);
            if (tracingId != null)
            {
                writer.Write(TracingId);
                writer.Write(tracingId.Value);
            }
            if (ttl != null)
            {
                writer.Write(Ttl);
                writer.Write(ttl.Value);
            }
            if (protocol != null)
            {
                writer.Write(Protocol);
                writer.Write(protocol);
            }
            if (filter != null)
            {
                writer.Write(Filter);
                writer.Write(filter);
            }
            if (dataMessageType != default)
            {
                writer.Write(DataMessageType);
                writer.Write((int)dataMessageType);
            }
            if (isPartial)
            {
                writer.Write(IsPartial);
                writer.Write(isPartial);
            }
            // todo : write more optional fields.
        }