| // 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. |
| |
| #ifndef FLUTTER_SHELL_PLATFORM_LINUX_FL_MESSAGE_CODEC_H_ |
| #define FLUTTER_SHELL_PLATFORM_LINUX_FL_MESSAGE_CODEC_H_ |
| |
| #if !defined(__FLUTTER_LINUX_INSIDE__) && !defined(FLUTTER_LINUX_COMPILATION) |
| #error "Only <flutter_linux/flutter_linux.h> can be included directly." |
| #endif |
| |
| #include <glib-object.h> |
| |
| #include "fl_value.h" |
| |
| G_BEGIN_DECLS |
| |
| /** |
| * FlMessageCodecError: |
| * @FL_MESSAGE_CODEC_ERROR_FAILED: Codec failed due to an unspecified error. |
| * @FL_MESSAGE_CODEC_ERROR_OUT_OF_DATA: Codec ran out of data reading a value. |
| * @FL_MESSAGE_CODEC_ERROR_ADDITIONAL_DATA: Additional data encountered in |
| * message. |
| * @FL_MESSAGE_CODEC_ERROR_UNSUPPORTED_TYPE: Codec encountered an unsupported |
| * #FlValue. |
| * |
| * Errors for #FlMessageCodec objects to set on failures. |
| */ |
| #define FL_MESSAGE_CODEC_ERROR fl_message_codec_error_quark() |
| |
| typedef enum { |
| FL_MESSAGE_CODEC_ERROR_FAILED, |
| FL_MESSAGE_CODEC_ERROR_OUT_OF_DATA, |
| FL_MESSAGE_CODEC_ERROR_ADDITIONAL_DATA, |
| FL_MESSAGE_CODEC_ERROR_UNSUPPORTED_TYPE, |
| } FlMessageCodecError; |
| |
| GQuark fl_message_codec_error_quark(void) G_GNUC_CONST; |
| |
| G_DECLARE_DERIVABLE_TYPE(FlMessageCodec, |
| fl_message_codec, |
| FL, |
| MESSAGE_CODEC, |
| GObject) |
| |
| /** |
| * FlMessageCodec: |
| * |
| * #FlMessageCodec is a message encoding/decoding mechanism that operates on |
| * #FlValue objects. Both operations returns errors if the conversion fails. |
| * Such situations should be treated as programming errors. |
| * |
| * #FlMessageCodec matches the MethodCodec class in the Flutter services |
| * library. |
| */ |
| |
| struct _FlMessageCodecClass { |
| GObjectClass parent_class; |
| |
| /** |
| * FlMessageCodec::encode_message: |
| * @codec: A #FlMessageCodec. |
| * @message: message to encode or %NULL to encode the null value. |
| * @error: (allow-none): #GError location to store the error occurring, or |
| * %NULL. |
| * |
| * Virtual method to encode a message. A subclass must implement this method. |
| * If the subclass cannot handle the type of @message then it must generate a |
| * FL_MESSAGE_CODEC_ERROR_UNSUPPORTED_TYPE error. |
| * |
| * Returns: a binary message or %NULL on error. |
| */ |
| GBytes* (*encode_message)(FlMessageCodec* codec, |
| FlValue* message, |
| GError** error); |
| |
| /** |
| * FlMessageCodec::decode_message: |
| * @codec: an #FlMessageCodec. |
| * @message: binary message to decode. |
| * @error: (allow-none): #GError location to store the error occurring, or |
| * %NULL. |
| * |
| * Virtual method to decode a message. A subclass must implement this method. |
| * If @message is too small then a #FL_MESSAGE_CODEC_ERROR_OUT_OF_DATA error |
| * must be generated. If @message is too large then a |
| * #FL_MESSAGE_CODEC_ERROR_ADDITIONAL_DATA error must be generated. |
| * |
| * Returns: an #FlValue or %NULL on error. |
| */ |
| FlValue* (*decode_message)(FlMessageCodec* codec, |
| GBytes* message, |
| GError** error); |
| }; |
| |
| /** |
| * fl_message_codec_encode_message: |
| * @codec: an #FlMessageCodec. |
| * @buffer: buffer to write to. |
| * @message: message to encode or %NULL to encode the null value. |
| * @error: (allow-none): #GError location to store the error occurring, or |
| * %NULL. |
| * |
| * Encodes a message into a binary representation. |
| * |
| * Returns: a binary encoded message or %NULL on error. |
| */ |
| GBytes* fl_message_codec_encode_message(FlMessageCodec* codec, |
| FlValue* message, |
| GError** error); |
| |
| /** |
| * fl_message_codec_decode_message: |
| * @codec: an #FlMessageCodec. |
| * @message: binary message to decode. |
| * @error: (allow-none): #GError location to store the error occurring, or |
| * %NULL. |
| * |
| * Decodes a message from a binary encoding. |
| * |
| * Returns: an #FlValue or %NULL on error. |
| */ |
| FlValue* fl_message_codec_decode_message(FlMessageCodec* codec, |
| GBytes* message, |
| GError** error); |
| |
| G_END_DECLS |
| |
| #endif // FLUTTER_SHELL_PLATFORM_LINUX_FL_MESSAGE_CODEC_H_ |