diff --git a/src/lager.erl b/src/lager.erl index 2ac44b7..10d703e 100644 --- a/src/lager.erl +++ b/src/lager.erl @@ -538,13 +538,15 @@ unsafe_format(Fmt, Args) -> _:_ -> io_lib:format("FORMAT ERROR: ~p ~p", [Fmt, Args]) end. -%% @doc Print a record lager found during parse transform +%% @doc Print a record or a list of records lager found during parse transform pr(Record, Module) when is_tuple(Record), is_atom(element(1, Record)) -> pr(Record, Module, []); +pr(List, Module) when is_list(List) -> + pr(List, Module, []); pr(Record, _) -> Record. -%% @doc Print a record lager found during parse transform +%% @doc Print a record or a list of records lager found during parse transform pr(Record, Module, Options) when is_tuple(Record), is_atom(element(1, Record)), is_list(Options) -> try case is_record_known(Record, Module) of @@ -558,9 +560,14 @@ pr(Record, Module, Options) when is_tuple(Record), is_atom(element(1, Record)), error:undef -> Record end; +pr(List, Module, Options) when is_list(List), is_list(Options) -> + [pr(Element, Module, Options) || Element <- List]; pr(Record, _, _) -> Record. +zip([FieldName|RecordFields], [FieldValue|Record], Module, Options, ToReturn) when is_list(FieldValue) -> + zip(RecordFields, Record, Module, Options, + [{FieldName, pr(FieldValue, Module, Options)}|ToReturn]); zip([FieldName|RecordFields], [FieldValue|Record], Module, Options, ToReturn) -> Compress = lists:member(compress, Options), case is_tuple(FieldValue) andalso diff --git a/test/pr_composite_test.erl b/test/pr_composite_test.erl index 9e2fbf5..add8381 100644 --- a/test/pr_composite_test.erl +++ b/test/pr_composite_test.erl @@ -1,4 +1,4 @@ --module(pr_nested_record_test). +-module(pr_composite_test). -compile([{parse_transform, lager_transform}]). @@ -17,3 +17,24 @@ nested_record_test() -> [{field1, x},{field2, y}]}}, {field2, {}}]}, Pr_B). + +list_field_test() -> + As = [#a{field1 = 1, field2 = a2}, + #a{field1 = 2, field2 = a2}], + B = #b{field1 = As, field2 = b2}, + Pr_B = lager:pr(B, ?MODULE), + ?assertEqual({'$lager_record', b, + [{field1, [{'$lager_record', a, + [{field1, 1},{field2, a2}]}, + {'$lager_record', a, + [{field1, 2},{field2, a2}]}]}, + {field2, b2}]}, + Pr_B). + +list_of_records_test() -> + As = [#a{field1 = 1, field2 = a2}, + #a{field1 = 2, field2 = a2}], + Pr_As = lager:pr(As, ?MODULE), + ?assertEqual([{'$lager_record', a, [{field1, 1},{field2, a2}]}, + {'$lager_record', a, [{field1, 2},{field2, a2}]}], + Pr_As).