10 if (o.type != msgpack::type::MAP) {
15 for (uint32_t i = 0; i < o.via.map.size; ++i) {
16 if (o.via.map.ptr[i].key.type != msgpack::type::STR) {
20 kvmap.emplace(std::string(o.via.map.ptr[i].key.via.str.ptr, o.via.map.ptr[i].key.via.str.size),
21 &o.via.map.ptr[i].val);
28 std::string
const& struct_name,
29 std::string
const& field_name,
33 auto it = kvmap.find(field_name);
34 if (it != kvmap.end()) {
36 it->second->convert(field);
37 }
catch (
const msgpack::type_error&) {
39 throw_or_abort(
"error converting into field " + struct_name +
"::" + field_name);
41 }
else if (!is_optional) {
42 throw_or_abort(
"missing field: " + struct_name +
"::" + field_name);
48 std::string
const& struct_name,
49 std::string
const& field_name,
53 if (
index >= array.size) {
56 auto element = array.ptr[
index];
58 element.convert(field);
59 }
catch (
const msgpack::type_error&) {
61 throw_or_abort(
"error converting into field " + struct_name +
"::" + field_name);
79 }
catch (
const msgpack::type_error&) {
95 }
catch (
const msgpack::type_error&) {
110 std::string name =
"StackItem";
111 if (o.type == msgpack::type::MAP) {
115 }
else if (o.type == msgpack::type::ARRAY) {
116 auto array = o.via.array;
126 std::vector<Witnesses::StackItem>
stack;
132 std::string name =
"WitnessStack";
133 if (o.type == msgpack::type::MAP) {
136 }
else if (o.type == msgpack::type::ARRAY) {
137 auto array = o.via.array;
163template <
typename Serializer>
166 serializer.increase_container_depth();
169 serializer.decrease_container_depth();
173template <
typename Deserializer>
176 deserializer.increase_container_depth();
180 deserializer.decrease_container_depth();
194template <
typename Serializer>
197 serializer.increase_container_depth();
199 serializer.decrease_container_depth();
203template <
typename Deserializer>
206 deserializer.increase_container_depth();
209 deserializer.decrease_container_depth();
223template <
typename Serializer>
226 serializer.increase_container_depth();
228 serializer.decrease_container_depth();
232template <
typename Deserializer>
235 deserializer.increase_container_depth();
238 deserializer.decrease_container_depth();
252template <
typename Serializer>
255 serializer.increase_container_depth();
257 serializer.decrease_container_depth();
261template <
typename Deserializer>
264 deserializer.increase_container_depth();
267 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)
friend bool operator==(const StackItem &, const StackItem &)
Witnesses::WitnessMap witness
void msgpack_unpack(msgpack::object const &o)
bool operator<(Witness const &rhs) const
friend bool operator==(const Witness &, const Witness &)
void msgpack_unpack(msgpack::object const &o)
friend bool operator==(const WitnessMap &, const WitnessMap &)
std::map< Witnesses::Witness, std::vector< uint8_t > > value
void msgpack_unpack(msgpack::object const &o)
std::vector< Witnesses::StackItem > stack
friend bool operator==(const WitnessStack &, const WitnessStack &)
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)