private void WriteTokenInternal()

in src/Elastic.Apm/Libraries/Newtonsoft.Json/Bson/BsonBinaryWriter.cs [71:188]


		private void WriteTokenInternal(BsonToken t)
		{
			switch (t.Type)
			{
				case BsonType.Object:
				{
					var value = (BsonObject)t;
					_writer.Write(value.CalculatedSize);
					foreach (var property in value)
					{
						_writer.Write((sbyte)property.Value.Type);
						WriteString((string)property.Name.Value, property.Name.ByteCount, null);
						WriteTokenInternal(property.Value);
					}
					_writer.Write((byte)0);
				}
					break;
				case BsonType.Array:
				{
					var value = (BsonArray)t;
					_writer.Write(value.CalculatedSize);
					ulong index = 0;
					foreach (var c in value)
					{
						_writer.Write((sbyte)c.Type);
						WriteString(index.ToString(CultureInfo.InvariantCulture), MathUtils.IntLength(index), null);
						WriteTokenInternal(c);
						index++;
					}
					_writer.Write((byte)0);
				}
					break;
				case BsonType.Integer:
				{
					var value = (BsonValue)t;
					_writer.Write(Convert.ToInt32(value.Value, CultureInfo.InvariantCulture));
				}
					break;
				case BsonType.Long:
				{
					var value = (BsonValue)t;
					_writer.Write(Convert.ToInt64(value.Value, CultureInfo.InvariantCulture));
				}
					break;
				case BsonType.Number:
				{
					var value = (BsonValue)t;
					_writer.Write(Convert.ToDouble(value.Value, CultureInfo.InvariantCulture));
				}
					break;
				case BsonType.String:
				{
					var value = (BsonString)t;
					WriteString((string)value.Value, value.ByteCount, value.CalculatedSize - 4);
				}
					break;
				case BsonType.Boolean:
					_writer.Write(t == BsonBoolean.True);
					break;
				case BsonType.Null:
				case BsonType.Undefined:
					break;
				case BsonType.Date:
				{
					var value = (BsonValue)t;

					long ticks = 0;

					if (value.Value is DateTime dateTime)
					{
						if (DateTimeKindHandling == DateTimeKind.Utc)
							dateTime = dateTime.ToUniversalTime();
						else if (DateTimeKindHandling == DateTimeKind.Local) dateTime = dateTime.ToLocalTime();

						ticks = DateTimeUtils.ConvertDateTimeToJavaScriptTicks(dateTime, false);
					}
#if HAVE_DATE_TIME_OFFSET
                    else
                    {
                        DateTimeOffset dateTimeOffset = (DateTimeOffset)value.Value;
                        ticks = DateTimeUtils.ConvertDateTimeToJavaScriptTicks(dateTimeOffset.UtcDateTime, dateTimeOffset.Offset);
                    }
#endif

					_writer.Write(ticks);
				}
					break;
				case BsonType.Binary:
				{
					var value = (BsonBinary)t;

					var data = (byte[])value.Value;
					_writer.Write(data.Length);
					_writer.Write((byte)value.BinaryType);
					_writer.Write(data);
				}
					break;
				case BsonType.Oid:
				{
					var value = (BsonValue)t;

					var data = (byte[])value.Value;
					_writer.Write(data);
				}
					break;
				case BsonType.Regex:
				{
					var value = (BsonRegex)t;

					WriteString((string)value.Pattern.Value, value.Pattern.ByteCount, null);
					WriteString((string)value.Options.Value, value.Options.ByteCount, null);
				}
					break;
				default:
					throw new ArgumentOutOfRangeException(nameof(t),
						"Unexpected token when writing BSON: {0}".FormatWith(CultureInfo.InvariantCulture, t.Type));
			}
		}