Skip to content

Commit ff53ed6

Browse files
Merge pull request #3007 from rabbitmq/mk-policy-event-formatting
Convert policy event keys to atoms (cherry picked from commit 80d35fd)
1 parent 89b4d62 commit ff53ed6

File tree

3 files changed

+24
-3
lines changed

3 files changed

+24
-3
lines changed

deps/rabbit/src/rabbit_policy.erl

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -350,12 +350,14 @@ validate(_VHost, <<"operator_policy">>, Name, Term, _User) ->
350350
rabbit_parameter_validation:proplist(
351351
Name, operator_policy_validation(), Term).
352352

353-
notify(VHost, <<"policy">>, Name, Term, ActingUser) ->
353+
notify(VHost, <<"policy">>, Name, Term0, ActingUser) ->
354354
update_policies(VHost),
355+
Term = rabbit_data_coercion:atomize_keys(Term0),
355356
rabbit_event:notify(policy_set, [{name, Name}, {vhost, VHost},
356357
{user_who_performed_action, ActingUser} | Term]);
357-
notify(VHost, <<"operator_policy">>, Name, Term, ActingUser) ->
358+
notify(VHost, <<"operator_policy">>, Name, Term0, ActingUser) ->
358359
update_policies(VHost),
360+
Term = rabbit_data_coercion:atomize_keys(Term0),
359361
rabbit_event:notify(policy_set, [{name, Name}, {vhost, VHost},
360362
{user_who_performed_action, ActingUser} | Term]).
361363

deps/rabbit_common/src/rabbit_data_coercion.erl

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
-module(rabbit_data_coercion).
99

1010
-export([to_binary/1, to_list/1, to_atom/1, to_integer/1, to_proplist/1, to_map/1]).
11-
-export([to_atom/2]).
11+
-export([to_atom/2, atomize_keys/1]).
1212

1313
-spec to_binary(Val :: binary() | list() | atom() | integer()) -> binary().
1414
to_binary(Val) when is_list(Val) -> list_to_binary(Val);
@@ -45,3 +45,10 @@ to_proplist(Val) when is_map(Val) -> maps:to_list(Val).
4545
-spec to_map(Val :: map() | list()) -> map().
4646
to_map(Val) when is_map(Val) -> Val;
4747
to_map(Val) when is_list(Val) -> maps:from_list(Val).
48+
49+
50+
-spec atomize_keys(Val :: map() | list()) -> map() | list().
51+
atomize_keys(Val) when is_list(Val) ->
52+
[{to_atom(K), V} || {K, V} <- Val];
53+
atomize_keys(Val) when is_map(Val) ->
54+
maps:from_list(atomize_keys(maps:to_list(Val))).

deps/rabbit_common/test/unit_SUITE.erl

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ groups() ->
3333
data_coercion_to_proplist,
3434
data_coercion_to_list,
3535
data_coercion_to_map,
36+
data_coercion_atomize_keys_proplist,
37+
data_coercion_atomize_keys_map,
3638
pget,
3739
encrypt_decrypt,
3840
encrypt_decrypt_term,
@@ -299,6 +301,16 @@ data_coercion_to_proplist(_Config) ->
299301
?assertEqual([{a, 1}], rabbit_data_coercion:to_proplist([{a, 1}])),
300302
?assertEqual([{a, 1}], rabbit_data_coercion:to_proplist(#{a => 1})).
301303

304+
data_coercion_atomize_keys_map(_Config) ->
305+
A = #{a => 1, b => 2, c => 3},
306+
B = rabbit_data_coercion:atomize_keys(#{a => 1, "b" => 2, <<"c">> => 3}),
307+
?assertEqual(A, B).
308+
309+
data_coercion_atomize_keys_proplist(_Config) ->
310+
A = [{a, 1}, {b, 2}, {c, 3}],
311+
B = rabbit_data_coercion:atomize_keys([{a, 1}, {"b", 2}, {<<"c">>, 3}]),
312+
?assertEqual(lists:usort(A), lists:usort(B)).
313+
302314
data_coercion_to_list(_Config) ->
303315
?assertEqual([{a, 1}], rabbit_data_coercion:to_list([{a, 1}])),
304316
?assertEqual([{a, 1}], rabbit_data_coercion:to_list(#{a => 1})).

0 commit comments

Comments
 (0)