example/custom_type.cc (41 lines of code) (raw):
#include <iostream>
#include "hessian2/codec.hpp"
#include "hessian2/basic_codec/object_codec.hpp"
struct Person {
int32_t age_{0};
std::string name_;
};
// The custom struct needs to implement from_hessian and to_hessian methods to
// encode and decode
void fromHessian(Person&, ::Hessian2::Decoder&);
bool toHessian(const Person&, ::Hessian2::Encoder&);
void fromHessian(Person& p, ::Hessian2::Decoder& d) {
auto age = d.decode<int32_t>();
if (age) {
p.age_ = *age;
}
auto name = d.decode<std::string>();
if (name) {
p.name_ = *name;
}
}
bool toHessian(const Person& p, ::Hessian2::Encoder& e) {
e.encode<int32_t>(p.age_);
e.encode<std::string>(p.name_);
return true;
}
int main() {
std::string out;
Hessian2::Encoder encode(out);
Person s;
s.age_ = 12;
s.name_ = "test";
encode.encode<Person>(s);
Hessian2::Decoder decode(out);
auto decode_person = decode.decode<Person>();
if (!decode_person) {
std::cerr << "hessian decode failed " << decode.getErrorMessage()
<< std::endl;
return -1;
}
std::cout << "Age: " << decode_person->age_
<< " Name: " << decode_person->name_ << std::endl;
}