code: public ByteBufHttpData writePayload(ByteBuf message) {
          verifyNotClosed();
          final boolean compressed = messageCompression && compressor != null;
          final int messageLength = message.readableBytes();
          try {
              final ByteBuf buf;
              if (messageLength != 0 && compressed) {
                  buf = writeCompressed(message);
              } else {
                  buf = writeUncompressed(message);
              }
              return new ByteBufHttpData(buf, false);
          } catch (IOException | RuntimeException e) {
              // IOException will not be thrown, since sink#deliverFrame doesn't throw.
              throw new ArmeriaStatusException(
                      StatusCodes.INTERNAL,
                      "Failed to frame message",
                      e);
          }
      }
docs: Writes out a payload message.
  
  @param message the message to be written out. Ownership is taken by {@link ArmeriaMessageFramer}.
  
  @return a {@link ByteBufHttpData} with the framed payload. Ownership is passed to caller.