getOffchainMessageV0Encoder function

Encoder<OffchainMessageV0> getOffchainMessageV0Encoder()

Returns a variable-size encoder for OffchainMessageV0.

Implementation

Encoder<OffchainMessageV0> getOffchainMessageV0Encoder() {
  return transformEncoder<List<Object?>, OffchainMessageV0>(
    getTupleEncoder([
      getOffchainMessageV0PreambleEncoder() as Encoder<Object?>,
      getUtf8Encoder() as Encoder<Object?>,
    ]),
    (offchainMessage) {
      // Validate content.
      switch (offchainMessage.content.format) {
        case OffchainMessageContentFormat.restrictedAscii1232BytesMax:
          assertIsOffchainMessageContentRestrictedAsciiOf1232BytesMax(
            offchainMessage.content,
          );
        case OffchainMessageContentFormat.utf81232BytesMax:
          assertIsOffchainMessageContentUtf8Of1232BytesMax(
            offchainMessage.content,
          );
        case OffchainMessageContentFormat.utf865535BytesMax:
          assertIsOffchainMessageContentUtf8Of65535BytesMax(
            offchainMessage.content,
          );
      }

      final messageLength = utf8.encode(offchainMessage.content.text).length;
      final preamble = <String, Object?>{
        'version': offchainMessage.version,
        'applicationDomain': offchainMessage.applicationDomain,
        'messageFormat': offchainMessage.content.format,
        'requiredSignatories': offchainMessage.requiredSignatories,
        'messageLength': messageLength,
      };
      return [preamble, offchainMessage.content.text];
    },
  );
}