Flutter Linux Embedder
fl_message_codec.h
Go to the documentation of this file.
1 // Copyright 2013 The Flutter Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef FLUTTER_SHELL_PLATFORM_LINUX_FL_MESSAGE_CODEC_H_
6 #define FLUTTER_SHELL_PLATFORM_LINUX_FL_MESSAGE_CODEC_H_
7 
8 #if !defined(__FLUTTER_LINUX_INSIDE__) && !defined(FLUTTER_LINUX_COMPILATION)
9 #error "Only <flutter_linux/flutter_linux.h> can be included directly."
10 #endif
11 
12 #include <glib-object.h>
13 #include <gmodule.h>
14 
15 #include "fl_value.h"
16 
17 G_BEGIN_DECLS
18 
19 /**
20  * FlMessageCodecError:
21  * @FL_MESSAGE_CODEC_ERROR_FAILED: Codec failed due to an unspecified error.
22  * @FL_MESSAGE_CODEC_ERROR_OUT_OF_DATA: Codec ran out of data reading a value.
23  * @FL_MESSAGE_CODEC_ERROR_ADDITIONAL_DATA: Additional data encountered in
24  * message.
25  * @FL_MESSAGE_CODEC_ERROR_UNSUPPORTED_TYPE: Codec encountered an unsupported
26  * #FlValue.
27  *
28  * Errors for #FlMessageCodec objects to set on failures.
29  */
30 #define FL_MESSAGE_CODEC_ERROR fl_message_codec_error_quark()
31 
32 typedef enum {
38 
39 GQuark fl_message_codec_error_quark(void) G_GNUC_CONST;
40 
41 G_MODULE_EXPORT
42 G_DECLARE_DERIVABLE_TYPE(FlMessageCodec,
43  fl_message_codec,
44  FL,
45  MESSAGE_CODEC,
46  GObject)
47 
48 /**
49  * FlMessageCodec:
50  *
51  * #FlMessageCodec is a message encoding/decoding mechanism that operates on
52  * #FlValue objects. Both operations returns errors if the conversion fails.
53  * Such situations should be treated as programming errors.
54  *
55  * #FlMessageCodec matches the MethodCodec class in the Flutter services
56  * library.
57  */
58 
59 struct _FlMessageCodecClass {
60  GObjectClass parent_class;
61 
62  /**
63  * FlMessageCodec::encode_message:
64  * @codec: A #FlMessageCodec.
65  * @message: message to encode or %NULL to encode the null value.
66  * @error: (allow-none): #GError location to store the error occurring, or
67  * %NULL.
68  *
69  * Virtual method to encode a message. A subclass must implement this method.
70  * If the subclass cannot handle the type of @message then it must generate a
71  * FL_MESSAGE_CODEC_ERROR_UNSUPPORTED_TYPE error.
72  *
73  * Returns: a binary message or %NULL on error.
74  */
75  GBytes* (*encode_message)(FlMessageCodec* codec,
76  FlValue* message,
77  GError** error);
78 
79  /**
80  * FlMessageCodec::decode_message:
81  * @codec: an #FlMessageCodec.
82  * @message: binary message to decode.
83  * @error: (allow-none): #GError location to store the error occurring, or
84  * %NULL.
85  *
86  * Virtual method to decode a message. A subclass must implement this method.
87  * If @message is too small then a #FL_MESSAGE_CODEC_ERROR_OUT_OF_DATA error
88  * must be generated. If @message is too large then a
89  * #FL_MESSAGE_CODEC_ERROR_ADDITIONAL_DATA error must be generated.
90  *
91  * Returns: an #FlValue or %NULL on error.
92  */
93  FlValue* (*decode_message)(FlMessageCodec* codec,
94  GBytes* message,
95  GError** error);
96 };
97 
98 /**
99  * fl_message_codec_encode_message:
100  * @codec: an #FlMessageCodec.
101  * @buffer: buffer to write to.
102  * @message: message to encode or %NULL to encode the null value.
103  * @error: (allow-none): #GError location to store the error occurring, or
104  * %NULL.
105  *
106  * Encodes a message into a binary representation.
107  *
108  * Returns: a binary encoded message or %NULL on error.
109  */
110 GBytes* fl_message_codec_encode_message(FlMessageCodec* codec,
111  FlValue* message,
112  GError** error);
113 
114 /**
115  * fl_message_codec_decode_message:
116  * @codec: an #FlMessageCodec.
117  * @message: binary message to decode.
118  * @error: (allow-none): #GError location to store the error occurring, or
119  * %NULL.
120  *
121  * Decodes a message from a binary encoding.
122  *
123  * Returns: an #FlValue or %NULL on error.
124  */
125 FlValue* fl_message_codec_decode_message(FlMessageCodec* codec,
126  GBytes* message,
127  GError** error);
128 
129 G_END_DECLS
130 
131 #endif // FLUTTER_SHELL_PLATFORM_LINUX_FL_MESSAGE_CODEC_H_
FlMessageCodecError
FlMessageCodecError
Definition: fl_message_codec.h:32
FlValue
typedefG_BEGIN_DECLS struct _FlValue FlValue
Definition: fl_value.h:40
FL_MESSAGE_CODEC_ERROR_ADDITIONAL_DATA
@ FL_MESSAGE_CODEC_ERROR_ADDITIONAL_DATA
Definition: fl_message_codec.h:35
G_DECLARE_DERIVABLE_TYPE
G_MODULE_EXPORT G_DECLARE_DERIVABLE_TYPE(FlMessageCodec, fl_message_codec, FL, MESSAGE_CODEC, GObject) struct _FlMessageCodecClass
Definition: fl_message_codec.h:42
FL_MESSAGE_CODEC_ERROR_FAILED
@ FL_MESSAGE_CODEC_ERROR_FAILED
Definition: fl_message_codec.h:33
FL
FL
Definition: fl_binary_messenger.cc:27
fl_message_codec_encode_message
GBytes * fl_message_codec_encode_message(FlMessageCodec *codec, FlValue *message, GError **error)
Definition: fl_message_codec.cc:17
FL_MESSAGE_CODEC_ERROR_OUT_OF_DATA
@ FL_MESSAGE_CODEC_ERROR_OUT_OF_DATA
Definition: fl_message_codec.h:34
fl_value.h
error
const uint8_t uint32_t uint32_t GError ** error
Definition: fl_pixel_buffer_texture_test.cc:40
FL_MESSAGE_CODEC_ERROR_UNSUPPORTED_TYPE
@ FL_MESSAGE_CODEC_ERROR_UNSUPPORTED_TYPE
Definition: fl_message_codec.h:36
fl_message_codec_error_quark
GQuark fl_message_codec_error_quark(void) G_GNUC_CONST
fl_message_codec_decode_message
FlValue * fl_message_codec_decode_message(FlMessageCodec *codec, GBytes *message, GError **error)
Definition: fl_message_codec.cc:33