hessian2/codec.cc (40 lines of code) (raw):
#include "hessian2/codec.hpp"
#include "hessian2/basic_codec/type_ref_codec.hpp"
#include "hessian2/basic_codec/def_ref_codec.hpp"
namespace Hessian2 {
void Encoder::encodeVarListBegin(const std::string&) {
writer_->writeByte(static_cast<uint8_t>(0x57));
}
void Encoder::encodeVarListEnd() { writer_->writeByte('Z'); }
void Encoder::encodeFixedListBegin(const std::string& type, uint32_t len) {
if (len <= 7) {
writer_->writeByte(static_cast<uint8_t>(0x70 + len));
} else {
writer_->writeByte('V');
}
if (!type.empty()) {
Object::TypeRef type_ref(type);
encode<Object::TypeRef>(type_ref);
}
if (len > 7) {
encode<int32_t>(len);
}
}
void Encoder::encodeFixedListEnd() {
// Do nothing
}
void Encoder::encodeMapBegin(const std::string& type) {
if (type.empty()) {
writer_->writeByte('H');
} else {
writer_->writeByte('M');
Object::TypeRef ref(type);
encode<Object::TypeRef>(ref);
}
}
void Encoder::encodeMapEnd() { writer_->writeByte('Z'); }
void Encoder::encodeClassInstanceBegin(const Object::RawDefinition& value) {
encode<Object::RawDefinition>(value);
}
void Encoder::encodeClassInstanceEnd() {
// Do nothing
}
} // namespace Hessian2