// 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_PUBLIC_FLUTTER_LINUX_FL_STANDARD_MESSAGE_CODEC_H_ #define FLUTTER_SHELL_PLATFORM_LINUX_PUBLIC_FLUTTER_LINUX_FL_STANDARD_MESSAGE_CODEC_H_ #if !defined(__FLUTTER_LINUX_INSIDE__) && !defined(FLUTTER_LINUX_COMPILATION) #error "Only can be included directly." #endif #include #include "fl_message_codec.h" G_BEGIN_DECLS G_MODULE_EXPORT G_DECLARE_DERIVABLE_TYPE(FlStandardMessageCodec, fl_standard_message_codec, FL, STANDARD_MESSAGE_CODEC, FlMessageCodec) /** * FlStandardMessageCodec: * * #FlStandardMessageCodec is an #FlMessageCodec that implements the Flutter * standard message encoding. This codec encodes and decodes #FlValue of type * #FL_VALUE_TYPE_NULL, #FL_VALUE_TYPE_BOOL, #FL_VALUE_TYPE_INT, * #FL_VALUE_TYPE_FLOAT, #FL_VALUE_TYPE_STRING, #FL_VALUE_TYPE_UINT8_LIST, * #FL_VALUE_TYPE_INT32_LIST, #FL_VALUE_TYPE_INT64_LIST, * #FL_VALUE_TYPE_FLOAT_LIST, #FL_VALUE_TYPE_LIST, and #FL_VALUE_TYPE_MAP. * * If other values types are required to be supported create a new subclass that * overrides write_value and read_value_of_type. * * #FlStandardMessageCodec matches the StandardCodec class in the Flutter * services library. */ struct _FlStandardMessageCodecClass { FlMessageCodecClass parent_class; /** * FlStandardMessageCodec::write_value: * @codec: an #FlStandardMessageCodec. * @buffer: a buffer to write into. * @value: (allow-none): value to write. * @error: (allow-none): #GError location to store the error occurring, or * %NULL. * * Virtual method to write an #FlValue in Flutter Standard encoding. * * If a codec needs to support custom #FlValue objects it must override this * method to encode those values. For non-custom values the parent method * should be called. * * Returns: %TRUE on success. */ gboolean (*write_value)(FlStandardMessageCodec* codec, GByteArray* buffer, FlValue* value, GError** error); /** * FlStandardMessageCodec::read_value_of_type: * @codec: an #FlStandardMessageCodec. * @buffer: buffer to read from. * @offset: (inout): read position in @buffer. * @type: the type of the value. * @error: (allow-none): #GError location to store the error occurring, or * %NULL. * * Virtual method to read an #FlValue in Flutter Standard encoding. * * If a codec needs to support custom #FlValue objects it must override this * method to decode those values. For non-custom values the parent method * should be called. * * Returns: an #FlValue or %NULL on error. */ FlValue* (*read_value_of_type)(FlStandardMessageCodec* codec, GBytes* buffer, size_t* offset, int type, GError** error); }; /* * fl_standard_message_codec_new: * * Creates an #FlStandardMessageCodec. * * Returns: a new #FlStandardMessageCodec. */ FlStandardMessageCodec* fl_standard_message_codec_new(); /** * fl_standard_message_codec_write_size: * @codec: an #FlStandardMessageCodec. * @buffer: buffer to write into. * @size: size value to write. * * Writes a size field in Flutter Standard encoding. */ void fl_standard_message_codec_write_size(FlStandardMessageCodec* codec, GByteArray* buffer, uint32_t size); /** * fl_standard_message_codec_read_size: * @codec: an #FlStandardMessageCodec. * @buffer: buffer to read from. * @offset: (inout): read position in @buffer. * @value: location to read size. * @error: (allow-none): #GError location to store the error occurring, or * %NULL. * * Reads a size field in Flutter Standard encoding. * * This method is intended for use by subclasses overriding * FlStandardMessageCodec::read_value_of_type. * * Returns: %TRUE on success. */ gboolean fl_standard_message_codec_read_size(FlStandardMessageCodec* codec, GBytes* buffer, size_t* offset, uint32_t* value, GError** error); /** * fl_standard_message_codec_write_value: * @codec: an #FlStandardMessageCodec. * @buffer: buffer to write into. * @value: (allow-none): value to write. * @error: (allow-none): #GError location to store the error occurring, or * %NULL. * * Writes an #FlValue in Flutter Standard encoding. * * This method is intended for use by subclasses overriding * FlStandardMessageCodec::write_value. * * Returns: %TRUE on success. */ gboolean fl_standard_message_codec_write_value(FlStandardMessageCodec* codec, GByteArray* buffer, FlValue* value, GError** error); /** * fl_standard_message_codec_read_value: * @codec: an #FlStandardMessageCodec. * @buffer: buffer to read from. * @offset: (inout): read position in @buffer. * @value: location to read size. * @error: (allow-none): #GError location to store the error occurring, or * %NULL. * * Reads an #FlValue in Flutter Standard encoding. * * This method is intended for use by subclasses overriding * FlStandardMessageCodec::read_value_of_type. * * Returns: a new #FlValue or %NULL on error. */ FlValue* fl_standard_message_codec_read_value(FlStandardMessageCodec* codec, GBytes* buffer, size_t* offset, GError** error); G_END_DECLS #endif // FLUTTER_SHELL_PLATFORM_LINUX_PUBLIC_FLUTTER_LINUX_FL_STANDARD_MESSAGE_CODEC_H_