17 if (o.type != msgpack::type::MAP) {
22 for (uint32_t i = 0; i < o.via.map.size; ++i) {
23 if (o.via.map.ptr[i].key.type != msgpack::type::STR) {
27 kvmap.emplace(std::string(o.via.map.ptr[i].key.via.str.ptr, o.via.map.ptr[i].key.via.str.size),
28 &o.via.map.ptr[i].val);
35 std::string
const& struct_name,
36 std::string
const& field_name,
40 auto it = kvmap.find(field_name);
41 if (it != kvmap.end()) {
43 it->second->convert(field);
44 }
catch (
const msgpack::type_error&) {
46 throw_or_abort(
"error converting into field " + struct_name +
"::" + field_name);
48 }
else if (!is_optional) {
49 throw_or_abort(
"missing field: " + struct_name +
"::" + field_name);
55 std::string
const& struct_name,
56 std::string
const& field_name,
60 if (
index >= array.size) {
63 auto element = array.ptr[
index];
65 element.convert(field);
66 }
catch (
const msgpack::type_error&) {
68 throw_or_abort(
"error converting into field " + struct_name +
"::" + field_name);
90 }
catch (
const msgpack::type_error&) {
110 }
catch (
const msgpack::type_error&) {
134 std::string name =
"StackItem";
135 if (o.type == msgpack::type::MAP) {
139 }
else if (o.type == msgpack::type::ARRAY) {
140 auto array = o.via.array;
150 std::vector<Witnesses::StackItem>
stack;
164 std::string name =
"WitnessStack";
165 if (o.type == msgpack::type::MAP) {
168 }
else if (o.type == msgpack::type::ARRAY) {
169 auto array = o.via.array;
203 if (deserializer.get_buffer_offset() < input.size()) {
212template <
typename Serializer>
215 serializer.increase_container_depth();
218 serializer.decrease_container_depth();
222template <
typename Deserializer>
225 deserializer.increase_container_depth();
229 deserializer.decrease_container_depth();
254 if (deserializer.get_buffer_offset() < input.size()) {
263template <
typename Serializer>
266 serializer.increase_container_depth();
268 serializer.decrease_container_depth();
272template <
typename Deserializer>
275 deserializer.increase_container_depth();
278 deserializer.decrease_container_depth();
303 if (deserializer.get_buffer_offset() < input.size()) {
312template <
typename Serializer>
315 serializer.increase_container_depth();
317 serializer.decrease_container_depth();
321template <
typename Deserializer>
324 deserializer.increase_container_depth();
327 deserializer.decrease_container_depth();
352 if (deserializer.get_buffer_offset() < input.size()) {
361template <
typename Serializer>
364 serializer.increase_container_depth();
366 serializer.decrease_container_depth();
370template <
typename Deserializer>
373 deserializer.increase_container_depth();
376 deserializer.decrease_container_depth();
bool operator==(const StackItem &lhs, const StackItem &rhs)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
std::string to_string(bb::avm2::ValueTag tag)
static std::map< std::string, msgpack::object const * > make_kvmap(msgpack::object const &o, std::string const &name)
static void conv_fld_from_array(msgpack::object_array const &array, std::string const &struct_name, std::string const &field_name, T &field, uint32_t index)
static void conv_fld_from_kvmap(std::map< std::string, msgpack::object const * > const &kvmap, std::string const &struct_name, std::string const &field_name, T &field, bool is_optional)
void msgpack_pack(auto &packer) const
friend bool operator==(const StackItem &, const StackItem &)
Witnesses::WitnessMap witness
std::vector< uint8_t > bincodeSerialize() const
void msgpack_unpack(msgpack::object const &o)
static StackItem bincodeDeserialize(std::vector< uint8_t >)
std::vector< uint8_t > bincodeSerialize() const
void msgpack_pack(auto &packer) const
bool operator<(Witness const &rhs) const
friend bool operator==(const Witness &, const Witness &)
static Witness bincodeDeserialize(std::vector< uint8_t >)
void msgpack_unpack(msgpack::object const &o)
void msgpack_pack(auto &packer) const
friend bool operator==(const WitnessMap &, const WitnessMap &)
std::vector< uint8_t > bincodeSerialize() const
static WitnessMap bincodeDeserialize(std::vector< uint8_t >)
std::map< Witnesses::Witness, std::vector< uint8_t > > value
void msgpack_unpack(msgpack::object const &o)
static WitnessStack bincodeDeserialize(std::vector< uint8_t >)
void msgpack_pack(auto &packer) const
std::vector< Witnesses::StackItem > stack
friend bool operator==(const WitnessStack &, const WitnessStack &)
std::vector< uint8_t > bincodeSerialize() const
void msgpack_unpack(msgpack::object const &o)
static T deserialize(Deserializer &deserializer)
static void serialize(const T &value, Serializer &serializer)
void throw_or_abort(std::string const &err)