diff options
author | Matthew Sackman <matthew@lshift.net> | 2010-02-03 16:15:12 +0000 |
---|---|---|
committer | Matthew Sackman <matthew@lshift.net> | 2010-02-03 16:15:12 +0000 |
commit | 3eff1b60a083a078015d483deceed34a5c878b39 (patch) | |
tree | 7c8a6dbc817d057380cfb2d69b6fdcac52590c7a /src/rabbit_exchange_type.erl | |
parent | f48331a165fb2e9944a30f89403ad60b97c1b97e (diff) | |
download | rabbitmq-server-3eff1b60a083a078015d483deceed34a5c878b39.tar.gz |
rabbit_exchange_type.erl => rabbit_exchange_type_registry.erl; rabbit_exchange_behaviour.erl => rabbit_exchange_type.erl; rabbit_exchange_behaviour_spec.hrl => rabbit_exchange_type_spec.hrl. Plus associated changes
Diffstat (limited to 'src/rabbit_exchange_type.erl')
-rw-r--r-- | src/rabbit_exchange_type.erl | 89 |
1 files changed, 16 insertions, 73 deletions
diff --git a/src/rabbit_exchange_type.erl b/src/rabbit_exchange_type.erl index 585cc883..3ebb227d 100644 --- a/src/rabbit_exchange_type.erl +++ b/src/rabbit_exchange_type.erl @@ -31,76 +31,19 @@ -module(rabbit_exchange_type). --behaviour(gen_server). - --export([start_link/0]). - --export([init/1, handle_call/3, handle_cast/2, handle_info/2, - terminate/2, code_change/3]). - --export([register/2, binary_to_type/1, lookup_module/1]). - --define(SERVER, ?MODULE). - -%% TODO specs - -%%--------------------------------------------------------------------------- - -start_link() -> - gen_server:start_link({local, ?SERVER}, ?MODULE, [], []). - -%%--------------------------------------------------------------------------- - -register(TypeName, ModuleName) -> - gen_server:call(?SERVER, {register, TypeName, ModuleName}). - -binary_to_type(TypeBin) when is_binary(TypeBin) -> - list_to_atom(binary_to_list(TypeBin)). - -lookup_module(T) when is_atom(T) -> - case ets:lookup(rabbit_exchange_type_modules, T) of - [{_, Module}] -> - {ok, Module}; - [] -> - {error, not_found} - end. - -%%--------------------------------------------------------------------------- - -internal_register(TypeName, ModuleName) - when is_binary(TypeName), is_atom(ModuleName) -> - true = ets:insert(rabbit_exchange_type_modules, - {binary_to_type(TypeName), ModuleName}), - ok. - -%%--------------------------------------------------------------------------- - -init([]) -> - rabbit_exchange_type_modules = - ets:new(rabbit_exchange_type_modules, [protected, set, named_table]), - - %% TODO: split out into separate boot startup steps. - ok = internal_register(<<"direct">>, rabbit_exchange_type_direct), - ok = internal_register(<<"fanout">>, rabbit_exchange_type_fanout), - ok = internal_register(<<"headers">>, rabbit_exchange_type_headers), - ok = internal_register(<<"topic">>, rabbit_exchange_type_topic), - - {ok, none}. - -handle_call({register, TypeName, ModuleName}, _From, State) -> - ok = internal_register(TypeName, ModuleName), - {reply, ok, State}; -handle_call(Request, _From, State) -> - {stop, {unhandled_call, Request}, State}. - -handle_cast(Request, State) -> - {stop, {unhandled_cast, Request}, State}. - -handle_info(Message, State) -> - {stop, {unhandled_info, Message}, State}. - -terminate(_Reason, _State) -> - ok. - -code_change(_OldVsn, State, _Extra) -> - {ok, State}. +-export([behaviour_info/1]). + +behaviour_info(callbacks) -> + [ + {description, 0}, + {publish, 2}, + + {validate, 1}, %% called BEFORE declaration, to check args etc; may exit with #amqp_error{} + {create, 1}, %% called after declaration when previously absent + {recover, 2}, %% called when recovering + {delete, 2}, %% called after exchange deletion + {add_binding, 2}, %% called after a binding has been added + {delete_binding, 2} %% called after a binding has been deleted + ]; +behaviour_info(_Other) -> + undefined. |