// types.h // // Copyright (c) 2023-2024 Junpei Kawamoto // // This software is released under the MIT License. // // http://opensource.org/licenses/mit-license.php #pragma once #include #include #include "rust/cxx.h" inline std::string from_rust(const rust::Str& v) { return static_cast(v); } inline std::vector from_rust(const rust::Vec& v) { std::vector res; for (const auto& item : v) { res.push_back(from_rust(item)); } return res; } template inline std::vector> from_rust(const rust::Vec& v) { std::vector> res; for (const auto& item : v) { res.push_back(from_rust(item.v)); } return res; } template inline std::vector> from_rust(const rust::Slice& v) { std::vector> res; for (const auto& item : v) { res.push_back(from_rust(item.v)); } return res; } inline std::vector from_rust(const rust::Vec& v) { return std::vector(v.begin(), v.end()); } inline rust::String to_rust(const std::string& v) { return rust::String(v); } inline rust::Vec to_rust(const std::vector& v) { rust::Vec res; for (const auto& item : v) { res.push_back(to_rust(item)); } return res; } template inline rust::Vec to_rust(const std::vector>& v) { rust::Vec res; for (const auto& item : v) { res.push_back(T { to_rust(item) }); } return res; } inline rust::Vec to_rust(const std::vector& v) { rust::Vec res; for (const auto& item : v) { res.push_back(item); } return res; } inline rust::Vec> to_rust(const std::vector>& v) { rust::Vec> res; for (const auto& item : v) { res.push_back(to_rust(item)); } return res; } inline rust::Vec>> to_rust(const std::vector>>& v) { rust::Vec>> res; for (const auto& item : v) { res.push_back(to_rust(item)); } return res; } inline rust::Vec to_rust(const std::vector& v) { rust::Vec res; for (const auto& item : v) { res.push_back(item); } return res; } template inline rust::Vec to_rust(const std::vector>& v) { rust::Vec res; for (const auto& item : v) { res.push_back(T { to_rust(item) }); } return res; }