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);
81 }
catch (
const msgpack::type_error&) {
99 }
catch (
const msgpack::type_error&) {
114 packer.pack_array(2);
121 std::string name =
"StackItem";
122 if (o.type == msgpack::type::MAP) {
126 }
else if (o.type == msgpack::type::ARRAY) {
127 auto array = o.via.array;
137 std::vector<Witnesses::StackItem>
stack;
143 packer.pack_array(1);
149 std::string name =
"WitnessStack";
150 if (o.type == msgpack::type::MAP) {
153 }
else if (o.type == msgpack::type::ARRAY) {
154 auto array = o.via.array;
168 if (!(lhs.
index == rhs.index)) {
171 if (!(lhs.
witness == rhs.witness)) {
180template <
typename Serializer>
183 serializer.increase_container_depth();
186 serializer.decrease_container_depth();
190template <
typename Deserializer>
193 deserializer.increase_container_depth();
197 deserializer.decrease_container_depth();
205 if (!(lhs.
value == rhs.value)) {
214template <
typename Serializer>
217 serializer.increase_container_depth();
219 serializer.decrease_container_depth();
223template <
typename Deserializer>
226 deserializer.increase_container_depth();
229 deserializer.decrease_container_depth();
237 if (!(lhs.
value == rhs.value)) {
246template <
typename Serializer>
249 serializer.increase_container_depth();
251 serializer.decrease_container_depth();
255template <
typename Deserializer>
258 deserializer.increase_container_depth();
261 deserializer.decrease_container_depth();
269 if (!(lhs.
stack == rhs.stack)) {
278template <
typename Serializer>
281 serializer.increase_container_depth();
283 serializer.decrease_container_depth();
287template <
typename Deserializer>
290 deserializer.increase_container_depth();
293 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
void msgpack_unpack(msgpack::object const &o)
void msgpack_pack(auto &packer) const
bool operator<(Witness const &rhs) const
friend bool operator==(const Witness &, const Witness &)
void msgpack_unpack(msgpack::object const &o)
void msgpack_pack(auto &packer) const
friend bool operator==(const WitnessMap &, const WitnessMap &)
std::map< Witnesses::Witness, std::vector< uint8_t > > value
void msgpack_unpack(msgpack::object const &o)
void msgpack_pack(auto &packer) const
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)