tryParseLogicalReplicationMessage function
Tries to check if the bytesList
is a LogicalReplicationMessage. If so,
LogicalReplicationMessage is returned, otherwise null
is returned.
Implementation
LogicalReplicationMessage? tryParseLogicalReplicationMessage(
PgByteDataReader reader, int length) {
// the first byte is the msg type
final firstByte = reader.readUint8();
final msgType = LogicalReplicationMessageTypes.fromByte(firstByte);
switch (msgType) {
case LogicalReplicationMessageTypes.Begin:
return BeginMessage._parse(reader);
case LogicalReplicationMessageTypes.Commit:
return CommitMessage._parse(reader);
case LogicalReplicationMessageTypes.Origin:
return OriginMessage._parse(reader);
case LogicalReplicationMessageTypes.Relation:
return RelationMessage._parse(reader);
case LogicalReplicationMessageTypes.Type:
return TypeMessage._parse(reader);
case LogicalReplicationMessageTypes.Insert:
return InsertMessage._parse(reader);
case LogicalReplicationMessageTypes.Update:
return UpdateMessage._parse(reader);
case LogicalReplicationMessageTypes.Delete:
return DeleteMessage._parse(reader);
case LogicalReplicationMessageTypes.Truncate:
return TruncateMessage._parse(reader);
case LogicalReplicationMessageTypes.Unsupported:
// wal2json messages starts with `{` as the first byte
if (firstByte == '{'.codeUnits.single) {
// note this needs the full set of bytes unlike other cases
final bb = BytesBuffer();
bb.addByte(firstByte);
bb.add(reader.read(length - 1));
try {
return JsonMessage(reader.encoding.decode(bb.toBytes()));
} catch (_) {
// ignore
}
}
return null;
}
}