blob: caccb3adb2deb0ab6aade87bf13a724004c9d7bf [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.
#include "flutter/shell/platform/common/client_wrapper/testing/test_codec_extensions.h"
namespace flutter {
PointExtensionSerializer::PointExtensionSerializer() = default;
PointExtensionSerializer::~PointExtensionSerializer() = default;
// static
const PointExtensionSerializer& PointExtensionSerializer::GetInstance() {
static PointExtensionSerializer sInstance;
return sInstance;
}
EncodableValue PointExtensionSerializer::ReadValueOfType(
uint8_t type,
ByteStreamReader* stream) const {
if (type == kPointType) {
int32_t x = stream->ReadInt32();
int32_t y = stream->ReadInt32();
return CustomEncodableValue(Point(x, y));
}
return StandardCodecSerializer::ReadValueOfType(type, stream);
}
void PointExtensionSerializer::WriteValue(const EncodableValue& value,
ByteStreamWriter* stream) const {
auto custom_value = std::get_if<CustomEncodableValue>(&value);
if (!custom_value) {
StandardCodecSerializer::WriteValue(value, stream);
return;
}
stream->WriteByte(kPointType);
const Point& point = std::any_cast<Point>(*custom_value);
stream->WriteInt32(point.x());
stream->WriteInt32(point.y());
}
SomeDataExtensionSerializer::SomeDataExtensionSerializer() = default;
SomeDataExtensionSerializer::~SomeDataExtensionSerializer() = default;
// static
const SomeDataExtensionSerializer& SomeDataExtensionSerializer::GetInstance() {
static SomeDataExtensionSerializer sInstance;
return sInstance;
}
EncodableValue SomeDataExtensionSerializer::ReadValueOfType(
uint8_t type,
ByteStreamReader* stream) const {
if (type == kSomeDataType) {
size_t size = ReadSize(stream);
std::vector<uint8_t> data;
data.resize(size);
stream->ReadBytes(data.data(), size);
EncodableValue label = ReadValue(stream);
return CustomEncodableValue(SomeData(std::get<std::string>(label), data));
}
return StandardCodecSerializer::ReadValueOfType(type, stream);
}
void SomeDataExtensionSerializer::WriteValue(const EncodableValue& value,
ByteStreamWriter* stream) const {
auto custom_value = std::get_if<CustomEncodableValue>(&value);
if (!custom_value) {
StandardCodecSerializer::WriteValue(value, stream);
return;
}
stream->WriteByte(kSomeDataType);
const SomeData& some_data = std::any_cast<SomeData>(*custom_value);
size_t data_size = some_data.data().size();
WriteSize(data_size, stream);
stream->WriteBytes(some_data.data().data(), data_size);
WriteValue(EncodableValue(some_data.label()), stream);
}
} // namespace flutter