11 if (o.type != msgpack::type::MAP) {
16 for (uint32_t i = 0; i < o.via.map.size; ++i) {
17 if (o.via.map.ptr[i].key.type != msgpack::type::STR) {
21 kvmap.emplace(std::string(o.via.map.ptr[i].key.via.str.ptr, o.via.map.ptr[i].key.via.str.size),
22 &o.via.map.ptr[i].val);
29 std::string
const& struct_name,
30 std::string
const& field_name,
34 auto it = kvmap.find(field_name);
35 if (it != kvmap.end()) {
37 it->second->convert(field);
38 }
catch (
const msgpack::type_error&) {
40 throw_or_abort(
"error converting into field " + struct_name +
"::" + field_name);
42 }
else if (!is_optional) {
43 throw_or_abort(
"missing field: " + struct_name +
"::" + field_name);
49 std::string
const& struct_name,
50 std::string
const& field_name,
54 if (
index >= array.size) {
57 auto element = array.ptr[
index];
59 element.convert(field);
60 }
catch (
const msgpack::type_error&) {
62 throw_or_abort(
"error converting into field " + struct_name +
"::" + field_name);
84 }
catch (
const msgpack::type_error&) {
104 }
catch (
const msgpack::type_error&) {
128 std::string name =
"StackItem";
129 if (o.type == msgpack::type::MAP) {
133 }
else if (o.type == msgpack::type::ARRAY) {
134 auto array = o.via.array;
144 std::vector<Witnesses::StackItem>
stack;
158 std::string name =
"WitnessStack";
159 if (o.type == msgpack::type::MAP) {
162 }
else if (o.type == msgpack::type::ARRAY) {
163 auto array = o.via.array;
197 if (deserializer.get_buffer_offset() < input.size()) {
206template <
typename Serializer>
209 serializer.increase_container_depth();
212 serializer.decrease_container_depth();
216template <
typename Deserializer>
219 deserializer.increase_container_depth();
223 deserializer.decrease_container_depth();
248 if (deserializer.get_buffer_offset() < input.size()) {
257template <
typename Serializer>
260 serializer.increase_container_depth();
262 serializer.decrease_container_depth();
266template <
typename Deserializer>
269 deserializer.increase_container_depth();
272 deserializer.decrease_container_depth();
297 if (deserializer.get_buffer_offset() < input.size()) {
306template <
typename Serializer>
309 serializer.increase_container_depth();
311 serializer.decrease_container_depth();
315template <
typename Deserializer>
318 deserializer.increase_container_depth();
321 deserializer.decrease_container_depth();
346 if (deserializer.get_buffer_offset() < input.size()) {
355template <
typename Serializer>
358 serializer.increase_container_depth();
360 serializer.decrease_container_depth();
364template <
typename Deserializer>
367 deserializer.increase_container_depth();
370 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)