blob: 7241ff11b24f26f09bb584de42c4ce39dc09af6e [file] [log] [blame]
James Feist284a0f92018-04-05 15:28:16 -07001/*
2// Copyright (c) 2018 Intel Corporation
3//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15*/
16
17#pragma once
James Feist284a0f92018-04-05 15:28:16 -070018#include <sdbusplus/message.hpp>
Patrick Williams127b8ab2020-05-21 15:24:19 -050019
Patrick Venture95269db2018-08-31 09:19:17 -070020#include <tuple>
James Feist284a0f92018-04-05 15:28:16 -070021
22namespace sdbusplus
23{
24namespace utility
25{
26
27namespace detail
28{
29template <class F, size_t... Is>
30constexpr auto index_apply_impl(F f, std::index_sequence<Is...>)
31{
32 return f(std::integral_constant<size_t, Is>{}...);
33}
Patrick Venture2b238af2018-08-31 12:45:01 -070034template <size_t N, class F>
35constexpr auto index_apply(F f)
James Feist284a0f92018-04-05 15:28:16 -070036{
37 return index_apply_impl(f, std::make_index_sequence<N>{});
38}
39} // namespace detail
40template <class Tuple>
Patrick Williams10d7aa12021-11-19 11:36:18 -060041constexpr bool read_into_tuple(Tuple& t, message_t& m)
James Feist284a0f92018-04-05 15:28:16 -070042{
43 return detail::index_apply<std::tuple_size<Tuple>{}>([&](auto... Is) {
44 if (m.is_method_error())
45 {
46 return false;
47 }
48 m.read(std::get<Is>(t)...);
49 return true;
50 });
51}
52} // namespace utility
53} // namespace sdbusplus