/*
* Copyright 2018 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#pragma once
#include "tuningfork/tuningfork.h"
#include <vector>
#include <cstdint>
#include <cstdlib>
namespace tuningfork {
template <typename T>
bool Deserialize(const std::vector<uint8_t> &ser, T &pb) {
return pb.ParseFromArray(ser.data(), ser.size());
}
template <typename T>
bool Serialize(const T &pb, std::vector<uint8_t> &ser) {
ser.resize(pb.ByteSize());
return pb.SerializeToArray(ser.data(), ser.size());
}
template <typename T>
std::vector<uint8_t> Serialize(const T &pb) {
std::vector<uint8_t> ser(pb.ByteSize());
pb.SerializeToArray(ser.data(), ser.size());
return ser;
}
// Serialize to a CProtobuf. The caller takes ownership of the returned serialization and must
// call CProtobufSerialization_Free to deallocate any memory.
template <typename T>
CProtobufSerialization CProtobufSerialization_Alloc(const T &pb) {
CProtobufSerialization cser;
cser.bytes = (uint8_t*)::malloc(pb.ByteSize());
cser.size = pb.ByteSize();
cser.dealloc = ::free;
pb.SerializeToArray(cser.bytes, cser.size);
return cser;
}
void CProtobufSerialization_Free(CProtobufSerialization* ser);
} // namespace tuningfork {