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_PUBLIC_FLUTTER_LINUX_FL_MESSAGE_CODEC_H_
6 #define FLUTTER_SHELL_PLATFORM_LINUX_PUBLIC_FLUTTER_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 G_MODULE_EXPORT
40 GQuark fl_message_codec_error_quark(void) G_GNUC_CONST;
41 
42 G_MODULE_EXPORT
43 G_DECLARE_DERIVABLE_TYPE(FlMessageCodec,
44  fl_message_codec,
45  FL,
46  MESSAGE_CODEC,
47  GObject)
48 
49 /**
50  * FlMessageCodec:
51  *
52  * #FlMessageCodec is a message encoding/decoding mechanism that operates on
53  * #FlValue objects. Both operations returns errors if the conversion fails.
54  * Such situations should be treated as programming errors.
55  *
56  * #FlMessageCodec matches the MethodCodec class in the Flutter services
57  * library.
58  */
59 
60 struct _FlMessageCodecClass {
61  GObjectClass parent_class;
62 
63  /**
64  * FlMessageCodec::encode_message:
65  * @codec: an #FlMessageCodec.
66  * @message: message to encode or %NULL to encode the null value.
67  * @error: (allow-none): #GError location to store the error occurring, or
68  * %NULL. If `error` is not %NULL, `*error` must be initialized (typically
69  * %NULL, but an error from a previous call using GLib error handling is
70  * explicitly valid).
71  *
72  * Virtual method to encode a message. A subclass must implement this method.
73  * If the subclass cannot handle the type of @message then it must generate a
74  * FL_MESSAGE_CODEC_ERROR_UNSUPPORTED_TYPE error.
75  *
76  * Returns: a binary message or %NULL on error.
77  */
78  GBytes* (*encode_message)(FlMessageCodec* codec,
80  GError** error);
81 
82  /**
83  * FlMessageCodec::decode_message:
84  * @codec: an #FlMessageCodec.
85  * @message: binary message to decode.
86  * @error: (allow-none): #GError location to store the error occurring, or
87  * %NULL. If `error` is not %NULL, `*error` must be initialized (typically
88  * %NULL, but an error from a previous call using GLib error handling is
89  * explicitly valid).
90  *
91  * Virtual method to decode a message. A subclass must implement this method.
92  * If @message is too small then a #FL_MESSAGE_CODEC_ERROR_OUT_OF_DATA error
93  * must be generated. If @message is too large then a
94  * #FL_MESSAGE_CODEC_ERROR_ADDITIONAL_DATA error must be generated.
95  *
96  * Returns: an #FlValue or %NULL on error.
97  */
98  FlValue* (*decode_message)(FlMessageCodec* codec,
99  GBytes* message,
100  GError** error);
101 };
102 
103 /**
104  * fl_message_codec_encode_message:
105  * @codec: an #FlMessageCodec.
106  * @buffer: buffer to write to.
107  * @message: message to encode or %NULL to encode the null value.
108  * @error: (allow-none): #GError location to store the error occurring, or
109  * %NULL. If `error` is not %NULL, `*error` must be initialized (typically
110  * %NULL, but an error from a previous call using GLib error handling is
111  * explicitly valid).
112  *
113  * Encodes a message into a binary representation.
114  *
115  * Returns: a binary encoded message or %NULL on error.
116  */
117 GBytes* fl_message_codec_encode_message(FlMessageCodec* codec,
118  FlValue* message,
119  GError** error);
120 
121 /**
122  * fl_message_codec_decode_message:
123  * @codec: an #FlMessageCodec.
124  * @message: binary message to decode.
125  * @error: (allow-none): #GError location to store the error occurring, or
126  * %NULL. If `error` is not %NULL, `*error` must be initialized (typically
127  * %NULL, but an error from a previous call using GLib error handling is
128  * explicitly valid).
129  *
130  * Decodes a message from a binary encoding.
131  *
132  * Returns: an #FlValue or %NULL on error.
133  */
134 FlValue* fl_message_codec_decode_message(FlMessageCodec* codec,
135  GBytes* message,
136  GError** error);
137 
138 G_END_DECLS
139 
140 #endif // FLUTTER_SHELL_PLATFORM_LINUX_PUBLIC_FLUTTER_LINUX_FL_MESSAGE_CODEC_H_
const char * message
FlMessageCodecError
@ FL_MESSAGE_CODEC_ERROR_OUT_OF_DATA
@ FL_MESSAGE_CODEC_ERROR_UNSUPPORTED_TYPE
@ FL_MESSAGE_CODEC_ERROR_FAILED
@ FL_MESSAGE_CODEC_ERROR_ADDITIONAL_DATA
FlValue * fl_message_codec_decode_message(FlMessageCodec *codec, GBytes *message, GError **error)
G_MODULE_EXPORT G_DECLARE_DERIVABLE_TYPE(FlMessageCodec, fl_message_codec, FL, MESSAGE_CODEC, GObject) struct _FlMessageCodecClass
GBytes * fl_message_codec_encode_message(FlMessageCodec *codec, FlValue *message, GError **error)
G_MODULE_EXPORT GQuark fl_message_codec_error_quark(void) G_GNUC_CONST
const uint8_t uint32_t uint32_t GError ** error
typedefG_BEGIN_DECLS struct _FlValue FlValue
Definition: fl_value.h:42