writeValue method

  1. @override
void writeValue(
  1. WriteBuffer buffer,
  2. dynamic value
)
override

Writes value to buffer by first writing a type discriminator byte, then the value itself.

This method may be called recursively to serialize container values.

Type discriminators 0 through 127 inclusive are reserved for use by the base class, as follows:

  • null = 0
  • true = 1
  • false = 2
  • 32 bit integer = 3
  • 64 bit integer = 4
  • larger integers = 5 (see below)
  • 64 bit floating-point number = 6
  • String = 7
  • Uint8List = 8
  • Int32List = 9
  • Int64List = 10
  • Float64List = 11
  • List = 12
  • Map = 13
  • Float32List = 14
  • Reserved for future expansion: 15..127

The codec can be extended by overriding this method, calling super for values that the extension does not handle. Type discriminators used by extensions must be greater than or equal to 128 in order to avoid clashes with any later extensions to the base class.

The "larger integers" type, 5, is never used by writeValue. A subclass could represent big integers from another package using that type. The format is first the type byte (0x05), then the actual number as an ASCII string giving the hexadecimal representation of the integer, with the string's length as encoded by writeSize followed by the string bytes. On Android, that would get converted to a java.math.BigInteger object. On iOS, the string representation is returned.

Implementation

@override
void writeValue(WriteBuffer buffer, dynamic value) {
  if (value is DateTime) {
    buffer.putUint8(_kDateTime);
    writeValue(buffer, value.millisecondsSinceEpoch);
  } else if (value is DataQueryBuilder) {
    buffer.putUint8(_kDataQueryBuilder);
    writeValue(buffer, value.toJson());
  } else if (value is LoadRelationsQueryBuilder) {
    buffer.putUint8(_kLoadRelationsQueryBuilder);
    writeValue(buffer, value.toJson());
  } else if (value is ObjectProperty) {
    buffer.putUint8(_kObjectProperty);
    writeValue(buffer, value.toJson());
  } else if (value is GooglePlaySubscriptionStatus) {
    buffer.putUint8(_kGooglePlaySubscriptionStatus);
    writeValue(buffer, value.toJson());
  } else if (value is GooglePlayPurchaseStatus) {
    buffer.putUint8(_kGooglePlayPurchaseStatus);
    writeValue(buffer, value.toJson());
  } else if (value is FileInfo) {
    buffer.putUint8(_kFileInfo);
    writeValue(buffer, value.toJson());
  } else if (value is MessageStatus) {
    buffer.putUint8(_kMessageStatus);
    writeValue(buffer, value.toJson());
  } else if (value is DeviceRegistration) {
    buffer.putUint8(_kDeviceRegistration);
    writeValue(buffer, value.toJson());
  } else if (value is PublishOptions) {
    buffer.putUint8(_kPublishOptions);
    writeValue(buffer, value.toJson());
  } else if (value is DeliveryOptions) {
    buffer.putUint8(_kDeliveryOptions);
    writeValue(buffer, value.toJson());
  } else if (value is PublishMessageInfo) {
    buffer.putUint8(_kPublishMessageInfo);
    writeValue(buffer, value.toJson());
  } else if (value is DeviceRegistrationResult) {
    buffer.putUint8(_kDeviceRegistrationResult);
    writeValue(buffer, value.toJson());
  } else if (value is Command) {
    buffer.putUint8(_kCommand);
    writeValue(buffer, value.toJson());
  } else if (value is UserInfo) {
    buffer.putUint8(_kUserInfo);
    writeValue(buffer, value.toJson());
  } else if (value is UserStatusResponse) {
    buffer.putUint8(_kUserStatusResponse);
    writeValue(buffer, value.toJson());
  } else if (value is ReconnectAttempt) {
    buffer.putUint8(_kReconnectAttempt);
    writeValue(buffer, value.toJson());
  } else if (value is BackendlessUser) {
    buffer.putUint8(_kBackendlessUser);
    writeValue(buffer, value.toJson());
  } else if (value is UserProperty) {
    buffer.putUint8(_kUserProperty);
    writeValue(buffer, value.toJson());
  } else if (value is BulkEvent) {
    buffer.putUint8(_kBulkEvent);
    writeValue(buffer, value.toJson());
  } else if (value is EmailEnvelope) {
    buffer.putUint8(_kEmailEnvelope);
    writeValue(buffer, value.toJson());
  } else if (value is Point) {
    buffer.putUint8(_kPoint);
    writeValue(buffer, value.asWKT());
  } else if (value is LineString) {
    buffer.putUint8(_kLineString);
    writeValue(buffer, value.asWKT());
  } else if (value is Polygon) {
    buffer.putUint8(_kPolygon);
    writeValue(buffer, value.asWKT());
  } else if (value is RelationStatus) {
    buffer.putUint8(_kRelationStatus);
    writeValue(buffer, value.toJson());
  } else if (value is Set) {
    writeValue(buffer, value.toList());
  } else if (value is BackendlessFault) {
    buffer.putUint8(_kBackendlessFault);
    writeValue(buffer, value.toJson());
  } else if (value is BackendlessException) {
    buffer.putUint8(_kBackendlessException);
    writeValue(buffer, value.toJson());
  } else {
    super.writeValue(buffer, value);
  }
}