// 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 can be included directly." #endif #include #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_