From 8a5064813881cfc286f39942627c02ae4f9bfc53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=20B=C3=B6rjesson?= Date: Tue, 17 Dec 2024 08:01:37 +0100 Subject: [PATCH] Explain macro --- src/lavinmq/metadata.cr | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/lavinmq/metadata.cr b/src/lavinmq/metadata.cr index fcaad276e9..171f3cbcc1 100644 --- a/src/lavinmq/metadata.cr +++ b/src/lavinmq/metadata.cr @@ -84,6 +84,31 @@ module LavinMQ end private def fetch(path : Symbol | String, &default : -> Value) + # The macto will generate a case statement that matches "paths" to values in + # the wrapped namedtuple structure. + # For NamedTupleMetaData.new({a: {b: 1, c: "foo"}}) the generated + # statement will look like: + # + # case path + # when "a", :"a" + # if value = @data[:a] + # return Value.new(value) + # end + # return Value.nil + # when "a.b", :"a.b" + # if value = @data[:a][:b] + # return Value.new(value) + # end + # return Value.nil + # when "a.b.c", :"a.b.c" + # if value = @data[:a][:b][:c] + # return Value.new(value) + # end + # return Value.nil + # else + # yield + # end + # {% begin %} {% paths = [] of Array(String)