diff options
| author | Francesco Mazzoli <francesco@rabbitmq.com> | 2012-03-05 18:38:17 +0000 |
|---|---|---|
| committer | Francesco Mazzoli <francesco@rabbitmq.com> | 2012-03-05 18:38:17 +0000 |
| commit | 1ad2258a20d24eda769219763d59b335407045b4 (patch) | |
| tree | 1e6f74036cdef1c3c7d87bb6f78c08f34c2f0ee5 | |
| parent | a27ec7d8268f0e4b1ac9778f887db8d7eb22ac1d (diff) | |
| download | rabbitmq-server-git-1ad2258a20d24eda769219763d59b335407045b4.tar.gz | |
Added -callbacks for rabbit_exchange_type. Deleted rabbit_exchange_type_spec.hrl.
rabbit_exchange_type_invalid doesn't typecheck (rightfully), we need to
change the type signature to remove the warning, but that's ugly...
| -rw-r--r-- | include/rabbit_exchange_type_spec.hrl | 38 | ||||
| -rw-r--r-- | src/rabbit_exchange_type.erl | 66 | ||||
| -rw-r--r-- | src/rabbit_exchange_type_direct.erl | 1 | ||||
| -rw-r--r-- | src/rabbit_exchange_type_fanout.erl | 1 | ||||
| -rw-r--r-- | src/rabbit_exchange_type_headers.erl | 1 | ||||
| -rw-r--r-- | src/rabbit_exchange_type_invalid.erl | 1 | ||||
| -rw-r--r-- | src/rabbit_exchange_type_topic.erl | 1 |
7 files changed, 42 insertions, 67 deletions
diff --git a/include/rabbit_exchange_type_spec.hrl b/include/rabbit_exchange_type_spec.hrl deleted file mode 100644 index 8f7e22d37e..0000000000 --- a/include/rabbit_exchange_type_spec.hrl +++ /dev/null @@ -1,38 +0,0 @@ -%% The contents of this file are subject to the Mozilla Public License -%% Version 1.1 (the "License"); you may not use this file except in -%% compliance with the License. You may obtain a copy of the License -%% at http://www.mozilla.org/MPL/ -%% -%% Software distributed under the License is distributed on an "AS IS" -%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See -%% the License for the specific language governing rights and -%% limitations under the License. -%% -%% The Original Code is RabbitMQ. -%% -%% The Initial Developer of the Original Code is VMware, Inc. -%% Copyright (c) 2007-2012 VMware, Inc. All rights reserved. -%% - --ifdef(use_specs). - --type(tx() :: 'transaction' | 'none'). --type(serial() :: pos_integer() | tx()). - --spec(description/0 :: () -> [{atom(), any()}]). --spec(serialise_events/0 :: () -> boolean()). --spec(route/2 :: (rabbit_types:exchange(), rabbit_types:delivery()) - -> rabbit_router:match_result()). --spec(validate/1 :: (rabbit_types:exchange()) -> 'ok'). --spec(create/2 :: (tx(), rabbit_types:exchange()) -> 'ok'). --spec(delete/3 :: (tx(), rabbit_types:exchange(), - [rabbit_types:binding()]) -> 'ok'). --spec(add_binding/3 :: (serial(), rabbit_types:exchange(), - rabbit_types:binding()) -> 'ok'). --spec(remove_bindings/3 :: (serial(), rabbit_types:exchange(), - [rabbit_types:binding()]) -> 'ok'). --spec(assert_args_equivalence/2 :: - (rabbit_types:exchange(), rabbit_framing:amqp_table()) - -> 'ok' | rabbit_types:connection_exit()). - --endif. diff --git a/src/rabbit_exchange_type.erl b/src/rabbit_exchange_type.erl index 44a08e2437..1027570c8b 100644 --- a/src/rabbit_exchange_type.erl +++ b/src/rabbit_exchange_type.erl @@ -16,39 +16,57 @@ -module(rabbit_exchange_type). --export([behaviour_info/1]). +-ifdef(use_specs). -behaviour_info(callbacks) -> - [ - {description, 0}, +-type(tx() :: 'transaction' | 'none'). +-type(serial() :: pos_integer() | tx()). + +-callback description() -> [proplist:property()]. + +%% Should Rabbit ensure that all binding events that are +%% delivered to an individual exchange can be serialised? (they +%% might still be delivered out of order, but there'll be a +%% serial number). +-callback serialise_events() -> boolean(). - %% Should Rabbit ensure that all binding events that are - %% delivered to an individual exchange can be serialised? (they - %% might still be delivered out of order, but there'll be a - %% serial number). - {serialise_events, 0}, +%% The no_return is there so that we can have an "invalid" exchange +%% type (see rabbit_exchange_type_invalid). +-callback route(rabbit_types:exchange(), rabbit_types:delivery()) -> + rabbit_router:match_result(). - {route, 2}, +%% called BEFORE declaration, to check args etc; may exit with #amqp_error{} +-callback validate(rabbit_types:exchange()) -> 'ok'. - %% called BEFORE declaration, to check args etc; may exit with #amqp_error{} - {validate, 1}, +%% called after declaration and recovery +-callback create(tx(), rabbit_types:exchange()) -> 'ok'. - %% called after declaration and recovery - {create, 2}, +%% called after exchange (auto)deletion. +-callback delete(tx(), rabbit_types:exchange(), [rabbit_types:binding()]) -> + 'ok'. - %% called after exchange (auto)deletion. - {delete, 3}, +%% called after a binding has been added or recovered +-callback add_binding(serial(), rabbit_types:exchange(), + rabbit_types:binding()) -> 'ok'. - %% called after a binding has been added or recovered - {add_binding, 3}, +%% called after bindings have been deleted. +-callback remove_bindings(serial(), rabbit_types:exchange(), + [rabbit_types:binding()]) -> 'ok'. - %% called after bindings have been deleted. - {remove_bindings, 3}, +%% called when comparing exchanges for equivalence - should return ok or +%% exit with #amqp_error{} +-callback assert_args_equivalence (rabbit_types:exchange(), + rabbit_framing:amqp_table()) -> + 'ok' | rabbit_types:connection_exit(). - %% called when comparing exchanges for equivalence - should return ok or - %% exit with #amqp_error{} - {assert_args_equivalence, 2} +-else. - ]; +-export([behaviour_info/1]). + +behaviour_info(callbacks) -> + [{description, 0}, {serialise_events, 0}, {route, 2}, {validate, 1}, + {create, 2}, {delete, 3}, {add_binding, 3}, {remove_bindings, 3}, + {assert_args_equivalence, 2}]; behaviour_info(_Other) -> undefined. + +-endif. diff --git a/src/rabbit_exchange_type_direct.erl b/src/rabbit_exchange_type_direct.erl index 4bce42d4da..cdec1cb9f2 100644 --- a/src/rabbit_exchange_type_direct.erl +++ b/src/rabbit_exchange_type_direct.erl @@ -22,7 +22,6 @@ -export([description/0, serialise_events/0, route/2]). -export([validate/1, create/2, delete/3, add_binding/3, remove_bindings/3, assert_args_equivalence/2]). --include("rabbit_exchange_type_spec.hrl"). -rabbit_boot_step({?MODULE, [{description, "exchange type direct"}, diff --git a/src/rabbit_exchange_type_fanout.erl b/src/rabbit_exchange_type_fanout.erl index cc3fb87c21..a64f2c2924 100644 --- a/src/rabbit_exchange_type_fanout.erl +++ b/src/rabbit_exchange_type_fanout.erl @@ -22,7 +22,6 @@ -export([description/0, serialise_events/0, route/2]). -export([validate/1, create/2, delete/3, add_binding/3, remove_bindings/3, assert_args_equivalence/2]). --include("rabbit_exchange_type_spec.hrl"). -rabbit_boot_step({?MODULE, [{description, "exchange type fanout"}, diff --git a/src/rabbit_exchange_type_headers.erl b/src/rabbit_exchange_type_headers.erl index de9979b422..61917d8f4a 100644 --- a/src/rabbit_exchange_type_headers.erl +++ b/src/rabbit_exchange_type_headers.erl @@ -23,7 +23,6 @@ -export([description/0, serialise_events/0, route/2]). -export([validate/1, create/2, delete/3, add_binding/3, remove_bindings/3, assert_args_equivalence/2]). --include("rabbit_exchange_type_spec.hrl"). -rabbit_boot_step({?MODULE, [{description, "exchange type headers"}, diff --git a/src/rabbit_exchange_type_invalid.erl b/src/rabbit_exchange_type_invalid.erl index 8f60f7d898..82d27960bc 100644 --- a/src/rabbit_exchange_type_invalid.erl +++ b/src/rabbit_exchange_type_invalid.erl @@ -22,7 +22,6 @@ -export([description/0, serialise_events/0, route/2]). -export([validate/1, create/2, delete/3, add_binding/3, remove_bindings/3, assert_args_equivalence/2]). --include("rabbit_exchange_type_spec.hrl"). description() -> [{name, <<"invalid">>}, diff --git a/src/rabbit_exchange_type_topic.erl b/src/rabbit_exchange_type_topic.erl index 84f4f8a9de..3160fdf46e 100644 --- a/src/rabbit_exchange_type_topic.erl +++ b/src/rabbit_exchange_type_topic.erl @@ -23,7 +23,6 @@ -export([description/0, serialise_events/0, route/2]). -export([validate/1, create/2, delete/3, add_binding/3, remove_bindings/3, assert_args_equivalence/2]). --include("rabbit_exchange_type_spec.hrl"). -rabbit_boot_step({?MODULE, [{description, "exchange type topic"}, |
