// 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_METHOD_CODEC_H_ #define FLUTTER_SHELL_PLATFORM_LINUX_FL_METHOD_CODEC_H_ #if !defined(__FLUTTER_LINUX_INSIDE__) && !defined(FLUTTER_LINUX_COMPILATION) #error "Only can be included directly." #endif #include #include "fl_method_response.h" #include "fl_value.h" G_BEGIN_DECLS G_DECLARE_DERIVABLE_TYPE(FlMethodCodec, fl_method_codec, FL, METHOD_CODEC, GObject) /** * FlMethodCodec: * * #FlMethodCodec is an abstract class that encodes and decodes method calls on * a platform channel. Override this class to implement an encoding. * * #FlMethodCodec matches the MethodCodec class in the Flutter services * library. */ struct _FlMethodCodecClass { GObjectClass parent_class; /** * FlMethodCodec::encode_method_call: * @codec: an #FlMethodCodec. * @name: method name. * @args: (allow-none): method arguments, or %NULL. * @error: (allow-none): #GError location to store the error occurring, or * %NULL. * * Encodes a method call. * * Returns: (transfer full): a binary encoding of this method call or %NULL if * not able to encode. */ GBytes* (*encode_method_call)(FlMethodCodec* codec, const gchar* name, FlValue* args, GError** error); /** * FlMethodCodec::decode_method_call: * @codec: an #FlMethodCodec * @message: message to decode. * @name: (transfer full): location to write method name or %NULL if not * required * @args: (transfer full): location to write method arguments, or %NULL if not * required * @error: (allow-none): #GError location to store the error occurring, or * %NULL * * Decodes a method call. * * Returns: %TRUE if successfully decoded. */ gboolean (*decode_method_call)(FlMethodCodec* codec, GBytes* message, gchar** name, FlValue** args, GError** error); /** * FlMethodCodec::encode_success_envelope: * @codec: an #FlMethodCodec. * @result: (allow-none): method result, or %NULL. * @error: (allow-none): #GError location to store the error occurring, or * %NULL. * * Encodes a successful response to a method call. * * Returns: (transfer full): a binary encoding of this response or %NULL if * not able to encode. */ GBytes* (*encode_success_envelope)(FlMethodCodec* codec, FlValue* result, GError** error); /** * FlMethodCodec::encode_error_envelope: * @codec: an #FlMethodCodec. * @code: an error code. * @message: (allow-none): an error message, or %NULL. * @details: (allow-none): error details, or %NULL. * @error: (allow-none): #GError location to store the error occurring, or * %NULL. * * Encodes an error response to a method call. * * Returns: (transfer full): a binary encoding of this response or %NULL if * not able to encode. */ GBytes* (*encode_error_envelope)(FlMethodCodec* codec, const gchar* code, const gchar* message, FlValue* details, GError** error); /** * FlMethodCodec::decode_response: * @codec: an #FlMethodCodec. * @message: message to decode. * @error: (allow-none): #GError location to store the error occurring, or * %NULL. * * Decodes a response to a method call. * * Returns: a new #FlMethodResponse or %NULL on error. */ FlMethodResponse* (*decode_response)(FlMethodCodec* codec, GBytes* message, GError** error); }; G_END_DECLS #endif // FLUTTER_SHELL_PLATFORM_LINUX_FL_METHOD_CODEC_H_