1111-behaviour (rabbit_registry_class ).
1212
1313-include (" amqqueue.hrl" ).
14+ -include (" vhost.hrl" ).
1415-include_lib (" rabbit_common/include/rabbit.hrl" ).
1516-include_lib (" amqp10_common/include/amqp10_types.hrl" ).
1617
2223 feature_flag_name /1 ,
2324 to_binary /1 ,
2425 default /0 ,
26+ default_alias /0 ,
2527 fallback /0 ,
28+ inject_dqt /1 ,
29+ vhosts_with_dqt /1 ,
2630 is_enabled /1 ,
2731 is_compatible /4 ,
2832 declare /2 ,
@@ -317,6 +321,15 @@ short_alias_of(rabbit_stream_queue) ->
317321% % AMQP 1.0 management client
318322short_alias_of ({utf8 , <<" stream" >>}) ->
319323 <<" stream" >>;
324+ % % for cases where this function is used for
325+ % % formatting of values that already might use these
326+ % % short aliases
327+ short_alias_of (<<" quorum" >>) ->
328+ <<" quorum" >>;
329+ short_alias_of (<<" classic" >>) ->
330+ <<" classic" >>;
331+ short_alias_of (<<" stream" >>) ->
332+ <<" stream" >>;
320333short_alias_of (_Other ) ->
321334 undefined .
322335
@@ -343,6 +356,10 @@ default() ->
343356 fallback ()),
344357 rabbit_data_coercion :to_atom (V ).
345358
359+ -spec default_alias () -> binary ().
360+ default_alias () ->
361+ short_alias_of (default ()).
362+
346363-spec to_binary (module ()) -> binary ().
347364to_binary (rabbit_classic_queue ) ->
348365 <<" classic" >>;
@@ -833,6 +850,29 @@ known_queue_type_names() ->
833850 QTypeBins = lists :map (fun (X ) -> atom_to_binary (X ) end , QueueTypes ),
834851 ? KNOWN_QUEUE_TYPES ++ QTypeBins .
835852
853+ inject_dqt (VHost ) when ? is_vhost (VHost ) ->
854+ inject_dqt (vhost :to_map (VHost ));
855+ inject_dqt (VHost ) when is_list (VHost ) ->
856+ inject_dqt (rabbit_data_coercion :to_map (VHost ));
857+ inject_dqt (M = #{default_queue_type := undefined }) ->
858+ NQT = short_alias_of (default ()),
859+ Meta0 = maps :get (metadata , M , #{}),
860+ Meta = Meta0 #{default_queue_type => NQT },
861+
862+ M #{default_queue_type => NQT , metadata => Meta };
863+ inject_dqt (M = #{default_queue_type := DQT }) ->
864+ NQT = short_alias_of (DQT ),
865+ Meta0 = maps :get (metadata , M , #{}),
866+ Meta = Meta0 #{default_queue_type => NQT },
867+
868+ M #{default_queue_type => NQT , metadata => Meta }.
869+
870+ -spec vhosts_with_dqt ([any ()]) -> [map ()].
871+ vhosts_with_dqt (List ) when is_list (List ) ->
872+ % % inject DQT (default queue type) at the top level and
873+ % % its metadata
874+ lists :map (fun inject_dqt /1 , List ).
875+
836876-spec check_queue_limits (amqqueue :amqqueue ()) ->
837877 ok |
838878 {error , queue_limit_exceeded , Reason :: string (), Args :: term ()}.
0 commit comments