// Copyright (c) 2025 The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #ifndef MP_PROXY_TYPE_MAP_H #define MP_PROXY_TYPE_MAP_H #include #include #include namespace mp { template void CustomBuildField(TypeList>, Priority<1>, InvokeContext& invoke_context, Value&& value, Output&& output) { // FIXME dededup with vector handler above auto list = output.init(value.size()); size_t i = 0; for (const auto& elem : value) { BuildField(TypeList>(), invoke_context, ListOutput(list, i), elem); ++i; } } template decltype(auto) CustomReadField(TypeList>, Priority<1>, InvokeContext& invoke_context, Input&& input, ReadDest&& read_dest) { return read_dest.update([&](auto& value) { auto data = input.get(); value.clear(); for (auto item : data) { ReadField(TypeList>(), invoke_context, Make(item), ReadDestEmplace( TypeList>(), [&](auto&&... args) -> auto& { return *value.emplace(std::forward(args)...).first; })); } }); } } // namespace mp #endif // MP_PROXY_TYPE_MAP_H