packTimestamp method

void packTimestamp(
  1. DateTime? v
)

Implementation

void packTimestamp(DateTime? v) {
  if (v == null) {
    packNull();
    return;
  }
  var ms = v.millisecondsSinceEpoch;
  var s = (ms / 1000).floor();
  var ns = (ms % 1000) * 1000000;
  if ((s >> 34) == 0) {
    int data64 = (ns << 34) | s;
    if (data64 & 0xffffffff00000000 == 0) {
      // timestamp 32
      _d.setUint8(_offset++, 0xd6);
      _d.setInt8(_offset++, -1);
      _d.setUint32(_offset, data64);
    } else {
      // timestamp 64
      _d.setUint8(_offset++, 0xd7);
      _d.setInt8(_offset++, -1);
      _d.setUint64(_offset, data64);
    }
  } else {
    // timestamp 96
    _d.setUint8(_offset++, 0xc7);
    _d.setUint8(_offset++, 12);
    _d.setInt8(_offset++, -1);
    _d.setUint32(_offset, ns);
    _d.setInt64(_offset, s);
  }
}