blob: a87214a14f38e016d983035cbc46f5b6b68ca83c [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package io.flutter.plugin.common;
import androidx.annotation.Nullable;
import java.nio.ByteBuffer;
/**
* A message encoding/decoding mechanism.
*
* <p>Both operations throw {@link IllegalArgumentException}, if conversion fails.
*/
public interface MessageCodec<T> {
/**
* Encodes the specified message into binary.
*
* @param message the T message, possibly null.
* @return a ByteBuffer containing the encoding between position 0 and the current position, or
* null, if message is null.
*/
@Nullable
ByteBuffer encodeMessage(@Nullable T message);
/**
* Decodes the specified message from binary.
*
* <p><b>Warning:</b> The ByteBuffer is "direct" and it won't be valid beyond this call. Storing
* the ByteBuffer and using it later and will lead to a {@code java.nio.BufferUnderflowException}.
* If you want to retain the data you'll need to copy it.
*
* @param message the {@link ByteBuffer} message, possibly null.
* @return a T value representation of the bytes between the given buffer's current position and
* its limit, or null, if message is null.
*/
@Nullable
T decodeMessage(@Nullable ByteBuffer message);
}