Flutter iOS Embedder
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_COMMON_CLIENT_WRAPPER_INCLUDE_FLUTTER_MESSAGE_CODEC_H_
6 #define FLUTTER_SHELL_PLATFORM_COMMON_CLIENT_WRAPPER_INCLUDE_FLUTTER_MESSAGE_CODEC_H_
7 
8 #include <memory>
9 #include <string>
10 #include <vector>
11 
12 namespace flutter {
13 
14 // Translates between a binary message and higher-level method call and
15 // response/error objects.
16 template <typename T>
17 class MessageCodec {
18  public:
19  MessageCodec() = default;
20 
21  virtual ~MessageCodec() = default;
22 
23  // Prevent copying.
24  MessageCodec(MessageCodec<T> const&) = delete;
25  MessageCodec& operator=(MessageCodec<T> const&) = delete;
26 
27  // Returns the message encoded in |binary_message|, or nullptr if it cannot be
28  // decoded by this codec.
29  std::unique_ptr<T> DecodeMessage(const uint8_t* binary_message,
30  const size_t message_size) const {
31  return std::move(DecodeMessageInternal(binary_message, message_size));
32  }
33 
34  // Returns the message encoded in |binary_message|, or nullptr if it cannot be
35  // decoded by this codec.
36  std::unique_ptr<T> DecodeMessage(
37  const std::vector<uint8_t>& binary_message) const {
38  size_t size = binary_message.size();
39  const uint8_t* data = size > 0 ? &binary_message[0] : nullptr;
40  return std::move(DecodeMessageInternal(data, size));
41  }
42 
43  // Returns a binary encoding of the given |message|, or nullptr if the
44  // message cannot be serialized by this codec.
45  std::unique_ptr<std::vector<uint8_t>> EncodeMessage(const T& message) const {
46  return std::move(EncodeMessageInternal(message));
47  }
48 
49  protected:
50  // Implementation of the public interface, to be provided by subclasses.
51  virtual std::unique_ptr<T> DecodeMessageInternal(
52  const uint8_t* binary_message,
53  const size_t message_size) const = 0;
54 
55  // Implementation of the public interface, to be provided by subclasses.
56  virtual std::unique_ptr<std::vector<uint8_t>> EncodeMessageInternal(
57  const T& message) const = 0;
58 };
59 
60 } // namespace flutter
61 
62 #endif // FLUTTER_SHELL_PLATFORM_COMMON_CLIENT_WRAPPER_INCLUDE_FLUTTER_MESSAGE_CODEC_H_
flutter::MessageCodec
Definition: message_codec.h:17
flutter::MessageCodec::operator=
MessageCodec & operator=(MessageCodec< T > const &)=delete
flutter::MessageCodec::EncodeMessageInternal
virtual std::unique_ptr< std::vector< uint8_t > > EncodeMessageInternal(const T &message) const =0
flutter::MessageCodec::DecodeMessage
std::unique_ptr< T > DecodeMessage(const uint8_t *binary_message, const size_t message_size) const
Definition: message_codec.h:29
flutter::MessageCodec::MessageCodec
MessageCodec()=default
flutter
Definition: accessibility_bridge.h:28
flutter::MessageCodec::DecodeMessageInternal
virtual std::unique_ptr< T > DecodeMessageInternal(const uint8_t *binary_message, const size_t message_size) const =0
flutter::MessageCodec::EncodeMessage
std::unique_ptr< std::vector< uint8_t > > EncodeMessage(const T &message) const
Definition: message_codec.h:45
flutter::MessageCodec::~MessageCodec
virtual ~MessageCodec()=default
flutter::MessageCodec::DecodeMessage
std::unique_ptr< T > DecodeMessage(const std::vector< uint8_t > &binary_message) const
Definition: message_codec.h:36