Skip to content

Commit 31ff329

Browse files
authored
Merge pull request #714 from elbeno/msg-logging
🎨 Unify message callbacks between indexed and normal handlers
2 parents f1df5ef + 861ec33 commit 31ff329

File tree

3 files changed

+21
-21
lines changed

3 files changed

+21
-21
lines changed

include/msg/callback.hpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,16 @@ struct callback {
2727
return msg::call_with_message<Msg>(matcher, data);
2828
}
2929

30-
template <typename... Args>
30+
template <stdx::ct_string Extra = "", typename... Args>
3131
[[nodiscard]] auto handle(auto const &data, Args &&...args) const -> bool {
3232
CIB_LOG_ENV(logging::get_level, logging::level::INFO);
3333
if (msg::call_with_message<Msg>(matcher, data)) {
3434
CIB_APPEND_LOG_ENV(typename Msg::env_t);
35-
CIB_LOG("Incoming message matched [{}], because [{}], executing "
35+
CIB_LOG("Incoming message matched [{}], because [{}]{}, executing "
3636
"callback",
3737
stdx::ct_string_to_type<Name, sc::string_constant>(),
38-
matcher.describe());
38+
matcher.describe(),
39+
stdx::ct_string_to_type<Extra, sc::string_constant>());
3940
msg::call_with_message<Msg>(callable, data,
4041
std::forward<Args>(args)...);
4142
return true;

include/msg/detail/indexed_builder_common.hpp

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include <stdx/bitset.hpp>
1616
#include <stdx/compiler.hpp>
1717
#include <stdx/concepts.hpp>
18+
#include <stdx/ct_format.hpp>
1819
#include <stdx/ct_string.hpp>
1920
#include <stdx/cx_map.hpp>
2021
#include <stdx/tuple.hpp>
@@ -162,18 +163,10 @@ struct indexed_builder_base {
162163
"Indexed callback has matcher that is never matched!");
163164
}
164165

165-
using msg_t = typename CB::msg_t;
166-
CIB_LOG_ENV(logging::get_level, logging::level::INFO);
167-
if (msg::call_with_message<msg_t>(cb.matcher, data)) {
168-
CIB_APPEND_LOG_ENV(typename msg_t::env_t);
169-
CIB_LOG("Incoming message matched [{}], because [{}] (collapsed to "
170-
"[{}]), executing callback",
171-
stdx::ct_string_to_type<cb.name, sc::string_constant>(),
172-
orig_cb.matcher.describe(), cb.matcher.describe());
173-
msg::call_with_message<msg_t>(cb.callable, data, args...);
174-
return true;
175-
}
176-
return false;
166+
constexpr auto matcher_str =
167+
stdx::ct_format<" (collapsed by index from [{}])">(
168+
orig_cb.matcher.describe());
169+
return cb.template handle<matcher_str>(data, args...);
177170
}
178171

179172
template <typename BuilderValue, std::size_t... Is>

test/msg/indexed_builder.cpp

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,8 @@ TEST_CASE("build handler multi fields", "[indexed_builder]") {
179179
CHECK(callback_success);
180180
CHECK(not callback_success_single_field);
181181
CAPTURE(log_buffer);
182-
CHECK(log_buffer.find("(collapsed to [true])") != std::string::npos);
182+
CHECK(log_buffer.find("because [true]") != std::string::npos);
183+
CHECK(log_buffer.find("(collapsed by index from") != std::string::npos);
183184

184185
callback_success = false;
185186
callback_success_single_field = false;
@@ -197,7 +198,8 @@ TEST_CASE("build handler multi fields", "[indexed_builder]") {
197198
CHECK(not callback_success);
198199
CHECK(callback_success_single_field);
199200
CAPTURE(log_buffer);
200-
CHECK(log_buffer.find("(collapsed to [true])") != std::string::npos);
201+
CHECK(log_buffer.find("because [true]") != std::string::npos);
202+
CHECK(log_buffer.find("(collapsed by index from") != std::string::npos);
201203
}
202204

203205
namespace {
@@ -253,7 +255,8 @@ TEST_CASE("build handler not single field", "[indexed_builder]") {
253255
test_msg_t{"test_id_field"_field = 0x51});
254256
CHECK(callback_success_single_field);
255257
CAPTURE(log_buffer);
256-
CHECK(log_buffer.find("(collapsed to [true])") != std::string::npos);
258+
CHECK(log_buffer.find("because [true]") != std::string::npos);
259+
CHECK(log_buffer.find("(collapsed by index from") != std::string::npos);
257260
}
258261

259262
namespace {
@@ -284,7 +287,8 @@ TEST_CASE("build handler not multi fields", "[indexed_builder]") {
284287
CHECK(callback_success);
285288
CHECK(not callback_success_single_field);
286289
CAPTURE(log_buffer);
287-
CHECK(log_buffer.find("(collapsed to [true])") != std::string::npos);
290+
CHECK(log_buffer.find("because [true]") != std::string::npos);
291+
CHECK(log_buffer.find("(collapsed by index from") != std::string::npos);
288292

289293
log_buffer.clear();
290294
callback_success = false;
@@ -294,7 +298,8 @@ TEST_CASE("build handler not multi fields", "[indexed_builder]") {
294298
CHECK(not callback_success);
295299
CHECK(callback_success_single_field);
296300
CAPTURE(log_buffer);
297-
CHECK(log_buffer.find("(collapsed to [true])") != std::string::npos);
301+
CHECK(log_buffer.find("because [true]") != std::string::npos);
302+
CHECK(log_buffer.find("(collapsed by index from") != std::string::npos);
298303

299304
log_buffer.clear();
300305
callback_success = false;
@@ -304,7 +309,8 @@ TEST_CASE("build handler not multi fields", "[indexed_builder]") {
304309
CHECK(callback_success);
305310
CHECK(callback_success_single_field);
306311
CAPTURE(log_buffer);
307-
CHECK(log_buffer.find("(collapsed to [true])") != std::string::npos);
312+
CHECK(log_buffer.find("because [true]") != std::string::npos);
313+
CHECK(log_buffer.find("(collapsed by index from") != std::string::npos);
308314
}
309315

310316
namespace {

0 commit comments

Comments
 (0)