#pragma once #include #include #include #include #include namespace sdbusplus { namespace utility { namespace details { template auto make_sub_tuple_impl(Tuple& t, std::index_sequence) { return std::tie(std::get(t)...); } template constexpr size_t args_to_skip() { constexpr std::size_t input_size = std::tuple_size_v; if constexpr (input_size > 1) { if (std::is_same_v, sdbusplus::message_t>) { return 2; } } return 1; } } // namespace details /* * Given a tuple of function args to a method callback, return a tuple * with references to only the dbus message arguments. * */ template constexpr auto make_dbus_args_tuple(std::tuple& t) { using tuple_type = std::remove_reference_t; constexpr std::size_t input_size = std::tuple_size_v; constexpr size_t skip_args = details::args_to_skip(); constexpr std::size_t new_size = input_size - skip_args; std::index_sequence seq = std::make_index_sequence{}; return details::make_sub_tuple_impl(t, seq); } } // namespace utility } // namespace sdbusplus