blob: 89aab3b9988f8d4d9407eedcc8932b00516f74b5 [file] [log] [blame]
// 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_COMMON_CPP_CLIENT_WRAPPER_ENCODABLE_VALUE_SERIALIZER_H_
#define FLUTTER_SHELL_PLATFORM_COMMON_CPP_CLIENT_WRAPPER_ENCODABLE_VALUE_SERIALIZER_H_
#include "byte_stream_wrappers.h"
#include "include/flutter/encodable_value.h"
namespace flutter {
// Encapsulates the logic for encoding/decoding EncodableValues to/from the
// standard codec binary representation.
class StandardCodecSerializer {
public:
StandardCodecSerializer();
~StandardCodecSerializer();
// Prevent copying.
StandardCodecSerializer(StandardCodecSerializer const&) = delete;
StandardCodecSerializer& operator=(StandardCodecSerializer const&) = delete;
// Reads and returns the next value from |stream|.
EncodableValue ReadValue(ByteBufferStreamReader* stream) const;
// Writes the encoding of |value| to |stream|.
void WriteValue(const EncodableValue& value,
ByteBufferStreamWriter* stream) const;
protected:
// Reads the variable-length size from the current position in |stream|.
size_t ReadSize(ByteBufferStreamReader* stream) const;
// Writes the variable-length size encoding to |stream|.
void WriteSize(size_t size, ByteBufferStreamWriter* stream) const;
// Reads a fixed-type list whose values are of type T from the current
// position in |stream|, and returns it as the corresponding EncodableValue.
// |T| must correspond to one of the support list value types of
// EncodableValue.
template <typename T>
EncodableValue ReadVector(ByteBufferStreamReader* stream) const;
// Writes |vector| to |stream| as a fixed-type list. |T| must correspond to
// one of the support list value types of EncodableValue.
template <typename T>
void WriteVector(const std::vector<T> vector,
ByteBufferStreamWriter* stream) const;
};
} // namespace flutter
#endif // FLUTTER_SHELL_PLATFORM_COMMON_CPP_CLIENT_WRAPPER_ENCODABLE_VALUE_SERIALIZER_H_