From af7628e20c5a3d9f751d601b82c7676acab982f2 Mon Sep 17 00:00:00 2001 From: Alexandru Scvortov Date: Thu, 1 Jul 2010 12:37:07 +0100 Subject: solved new warnings; now we get the same warnings as with dialyzer 2.2 --- src/rabbit_tests.erl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rabbit_tests.erl b/src/rabbit_tests.erl index 34eec121..3705522d 100644 --- a/src/rabbit_tests.erl +++ b/src/rabbit_tests.erl @@ -359,7 +359,7 @@ test_content_framing(FrameMax, Fragments) -> [Header | Frames] = rabbit_binary_generator:build_simple_content_frames( 1, - #content{class_id = 0, properties_bin = <<>>, + #content{class_id = 10, properties = none, properties_bin = <<>>, payload_fragments_rev = Fragments}, FrameMax), %% header is formatted correctly and the size is the total of the -- cgit v1.2.1 From d63ed195cb7a9a7643edd3aeb8014890bbe94575 Mon Sep 17 00:00:00 2001 From: Alexandru Scvortov Date: Thu, 1 Jul 2010 13:16:47 +0100 Subject: updated inet-related specs --- include/rabbit.hrl | 6 +++--- src/rabbit_misc.erl | 4 +--- src/rabbit_net.erl | 5 ++--- src/rabbit_networking.erl | 11 +++++------ 4 files changed, 11 insertions(+), 15 deletions(-) diff --git a/include/rabbit.hrl b/include/rabbit.hrl index 06297c69..8b87dd96 100644 --- a/include/rabbit.hrl +++ b/include/rabbit.hrl @@ -81,7 +81,7 @@ -type(erlang_node() :: atom()). -type(node_type() :: disc_only | disc | ram | unknown). -type(ssl_socket() :: #ssl_socket{}). --type(socket() :: port() | ssl_socket()). +-type(socket() :: inet:ip_port() | ssl_socket()). -type(thunk(T) :: fun(() -> T)). -type(info_key() :: atom()). -type(info() :: {info_key(), any()}). @@ -164,8 +164,8 @@ -type(listener() :: #listener{node :: erlang_node(), protocol :: atom(), - host :: string() | atom(), - port :: non_neg_integer()}). + host :: inet:hostname(), + port :: inet:ip_port()}). -type(not_found() :: {'error', 'not_found'}). -type(routing_result() :: 'routed' | 'unroutable' | 'not_delivered'). -type(amqp_error() :: diff --git a/src/rabbit_misc.erl b/src/rabbit_misc.erl index 35739dcb..146004b1 100644 --- a/src/rabbit_misc.erl +++ b/src/rabbit_misc.erl @@ -71,8 +71,6 @@ -ifdef(use_specs). --include_lib("kernel/include/inet.hrl"). - -type(ok_or_error() :: 'ok' | {'error', any()}). -spec(method_record_type/1 :: (tuple()) -> atom()). @@ -114,7 +112,7 @@ -spec(makenode/1 :: ({string(), string()} | string()) -> erlang_node()). -spec(nodeparts/1 :: (erlang_node() | string()) -> {string(), string()}). -spec(cookie_hash/0 :: () -> string()). --spec(tcp_name/3 :: (atom(), ip_address(), ip_port()) -> atom()). +-spec(tcp_name/3 :: (atom(), inet:ip_address(), inet:ip_port()) -> atom()). -spec(intersperse/2 :: (A, [A]) -> [A]). -spec(upmap/2 :: (fun ((A) -> B), [A]) -> [B]). -spec(map_in_order/2 :: (fun ((A) -> B), [A]) -> [B]). diff --git a/src/rabbit_net.erl b/src/rabbit_net.erl index 975954fc..9abd3ddb 100644 --- a/src/rabbit_net.erl +++ b/src/rabbit_net.erl @@ -31,7 +31,6 @@ -module(rabbit_net). -include("rabbit.hrl"). --include_lib("kernel/include/inet.hrl"). -export([async_recv/3, close/1, controlling_process/2, getstat/2, peername/1, port_command/2, @@ -51,9 +50,9 @@ -spec(port_command/2 :: (socket(), iolist()) -> 'true'). -spec(send/2 :: (socket(), binary() | iolist()) -> 'ok' | error()). -spec(peername/1 :: (socket()) -> - {'ok', {ip_address(), non_neg_integer()}} | error()). + {'ok', {inet:ip_address(), inet:ip_port()}} | error()). -spec(sockname/1 :: (socket()) -> - {'ok', {ip_address(), non_neg_integer()}} | error()). + {'ok', {inet:ip_address(), inet:ip_port()}} | error()). -spec(getstat/2 :: (socket(), [stat_option()]) -> {'ok', [{stat_option(), integer()}]} | error()). diff --git a/src/rabbit_networking.erl b/src/rabbit_networking.erl index 68ffc98a..d00b6062 100644 --- a/src/rabbit_networking.erl +++ b/src/rabbit_networking.erl @@ -63,13 +63,12 @@ -ifdef(use_specs). --type(host() :: ip_address() | string() | atom()). -type(connection() :: pid()). -spec(start/0 :: () -> 'ok'). --spec(start_tcp_listener/2 :: (host(), ip_port()) -> 'ok'). --spec(start_ssl_listener/3 :: (host(), ip_port(), [info()]) -> 'ok'). --spec(stop_tcp_listener/2 :: (host(), ip_port()) -> 'ok'). +-spec(start_tcp_listener/2 :: (inet:hostname(), inet:ip_port()) -> 'ok'). +-spec(start_ssl_listener/3 :: (inet:hostname(), inet:ip_port(), [info()]) -> 'ok'). +-spec(stop_tcp_listener/2 :: (inet:hostname(), inet:ip_port()) -> 'ok'). -spec(active_listeners/0 :: () -> [listener()]). -spec(node_listeners/1 :: (erlang_node()) -> [listener()]). -spec(connections/0 :: () -> [connection()]). @@ -80,8 +79,8 @@ -spec(connection_info_all/1 :: ([info_key()]) -> [[info()]]). -spec(close_connection/2 :: (pid(), string()) -> 'ok'). -spec(on_node_down/1 :: (erlang_node()) -> 'ok'). --spec(check_tcp_listener_address/3 :: (atom(), host(), ip_port()) -> - {ip_address(), atom()}). +-spec(check_tcp_listener_address/3 :: (atom(), inet:hostname(), inet:ip_port()) -> + {inet:ip_address(), atom()}). -endif. -- cgit v1.2.1 From 03fa15425824619c8c7e5a7277f34ecc0df351fe Mon Sep 17 00:00:00 2001 From: Alexandru Scvortov Date: Thu, 1 Jul 2010 13:33:19 +0100 Subject: updated file-related specs --- include/rabbit.hrl | 1 - src/rabbit.erl | 2 +- src/rabbit_dialyzer.erl | 6 +++--- src/rabbit_misc.erl | 16 ++++++++-------- src/rabbit_mnesia.erl | 3 ++- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/include/rabbit.hrl b/include/rabbit.hrl index 8b87dd96..9f981d7f 100644 --- a/include/rabbit.hrl +++ b/include/rabbit.hrl @@ -86,7 +86,6 @@ -type(info_key() :: atom()). -type(info() :: {info_key(), any()}). -type(regexp() :: binary()). --type(file_path() :: string()). %% this is really an abstract type, but dialyzer does not support them -type(guid() :: binary()). diff --git a/src/rabbit.erl b/src/rabbit.erl index 6cf6d7d5..7ae0b160 100644 --- a/src/rabbit.erl +++ b/src/rabbit.erl @@ -183,7 +183,7 @@ -ifdef(use_specs). --type(log_location() :: 'tty' | 'undefined' | string()). +-type(log_location() :: 'tty' | 'undefined' | file:filename()). -type(file_suffix() :: binary()). -spec(prepare/0 :: () -> 'ok'). diff --git a/src/rabbit_dialyzer.erl b/src/rabbit_dialyzer.erl index f19e8d02..5805611f 100644 --- a/src/rabbit_dialyzer.erl +++ b/src/rabbit_dialyzer.erl @@ -38,9 +38,9 @@ -ifdef(use_specs). --spec(create_basic_plt/1 :: (file_path()) -> 'ok'). --spec(add_to_plt/2 :: (file_path(), string()) -> 'ok'). --spec(dialyze_files/2 :: (file_path(), string()) -> 'ok'). +-spec(create_basic_plt/1 :: (file:filename()) -> 'ok'). +-spec(add_to_plt/2 :: (file:filename(), string()) -> 'ok'). +-spec(dialyze_files/2 :: (file:filename(), string()) -> 'ok'). -spec(halt_with_code/1 :: (atom()) -> no_return()). -endif. diff --git a/src/rabbit_misc.erl b/src/rabbit_misc.erl index 146004b1..331a9193 100644 --- a/src/rabbit_misc.erl +++ b/src/rabbit_misc.erl @@ -98,8 +98,8 @@ -spec(enable_cover/0 :: () -> ok_or_error()). -spec(start_cover/1 :: ([{string(), string()} | string()]) -> 'ok'). -spec(report_cover/0 :: () -> 'ok'). --spec(enable_cover/1 :: (file_path()) -> ok_or_error()). --spec(report_cover/1 :: (file_path()) -> 'ok'). +-spec(enable_cover/1 :: (file:filename()) -> ok_or_error()). +-spec(report_cover/1 :: (file:filename()) -> 'ok'). -spec(throw_on_error/2 :: (atom(), thunk({error, any()} | {ok, A} | A)) -> A). -spec(with_exit_handler/2 :: (thunk(A), thunk(A)) -> A). @@ -120,10 +120,10 @@ -spec(dirty_read_all/1 :: (atom()) -> [any()]). -spec(dirty_foreach_key/2 :: (fun ((any()) -> any()), atom()) -> 'ok' | 'aborted'). --spec(dirty_dump_log/1 :: (file_path()) -> ok_or_error()). --spec(read_term_file/1 :: (file_path()) -> {'ok', [any()]} | {'error', any()}). --spec(write_term_file/2 :: (file_path(), [any()]) -> ok_or_error()). --spec(append_file/2 :: (file_path(), string()) -> ok_or_error()). +-spec(dirty_dump_log/1 :: (file:filename()) -> ok_or_error()). +-spec(read_term_file/1 :: (file:filename()) -> {'ok', [any()]} | {'error', any()}). +-spec(write_term_file/2 :: (file:filename(), [any()]) -> ok_or_error()). +-spec(append_file/2 :: (file:filename(), string()) -> ok_or_error()). -spec(ensure_parent_dirs_exist/1 :: (string()) -> 'ok'). -spec(format_stderr/2 :: (string(), [any()]) -> 'ok'). -spec(start_applications/1 :: ([atom()]) -> 'ok'). @@ -137,8 +137,8 @@ -spec(version_compare/2 :: (string(), string()) -> 'lt' | 'eq' | 'gt'). -spec(version_compare/3 :: (string(), string(), ('lt' | 'lte' | 'eq' | 'gte' | 'gt')) -> boolean()). --spec(recursive_delete/1 :: ([file_path()]) -> - 'ok' | {'error', {file_path(), any()}}). +-spec(recursive_delete/1 :: ([file:filename()]) -> + 'ok' | {'error', {file:filename(), any()}}). -spec(dict_cons/3 :: (any(), any(), dict()) -> dict()). -spec(unlink_and_capture_exit/1 :: (pid()) -> 'ok'). diff --git a/src/rabbit_mnesia.erl b/src/rabbit_mnesia.erl index d4b29943..ba3019be 100644 --- a/src/rabbit_mnesia.erl +++ b/src/rabbit_mnesia.erl @@ -1,3 +1,4 @@ + %% 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 @@ -49,7 +50,7 @@ -spec(status/0 :: () -> [{'nodes', [{node_type(), [erlang_node()]}]} | {'running_nodes', [erlang_node()]}]). --spec(dir/0 :: () -> file_path()). +-spec(dir/0 :: () -> file:filename()). -spec(ensure_mnesia_dir/0 :: () -> 'ok'). -spec(init/0 :: () -> 'ok'). -spec(is_db_empty/0 :: () -> boolean()). -- cgit v1.2.1 From c61a2425626f80c16eedc53ef5ad638e2ba50c3e Mon Sep 17 00:00:00 2001 From: Alexandru Scvortov Date: Thu, 1 Jul 2010 16:48:32 +0100 Subject: partially moved types out of rabbit.hrl --- codegen.py | 101 +++++++++++++++++---------------- include/rabbit.hrl | 104 ---------------------------------- include/rabbit_backing_queue_spec.hrl | 18 +++--- include/rabbit_exchange_type_spec.hrl | 22 ++++--- src/rabbit.erl | 69 +++++++++++++++++++++- src/rabbit_access_control.erl | 30 ++++++---- src/rabbit_amqqueue.erl | 54 +++++++++++------- src/rabbit_basic.erl | 37 ++++++------ src/rabbit_binary_generator.erl | 15 +++-- src/rabbit_binary_parser.erl | 11 ++-- src/rabbit_channel.erl | 23 ++++---- src/rabbit_control.erl | 2 +- src/rabbit_exchange.erl | 68 ++++++++++++---------- src/rabbit_exchange_type_headers.erl | 3 +- src/rabbit_guid.erl | 4 ++ src/rabbit_invariable_queue.erl | 4 +- src/rabbit_misc.erl | 49 +++++++++------- src/rabbit_mnesia.erl | 9 ++- src/rabbit_net.erl | 2 + src/rabbit_networking.erl | 22 ++++--- src/rabbit_persister.erl | 16 +++--- src/rabbit_reader.erl | 8 +-- src/rabbit_reader_queue_collector.erl | 2 +- src/rabbit_router.erl | 5 +- src/rabbit_writer.erl | 28 +++++---- 25 files changed, 381 insertions(+), 325 deletions(-) diff --git a/codegen.py b/codegen.py index 0d6d9d56..8317e2b8 100644 --- a/codegen.py +++ b/codegen.py @@ -332,6 +332,9 @@ def genErl(spec): -export([lookup_amqp_exception/1]). -export([amqp_exception/1]). +-export_type([amqp_table/0, amqp_property_type/0, amqp_method_record/0, + amqp_method_name/0, amqp_method/0]). + bitvalue(true) -> 1; bitvalue(false) -> 0; bitvalue(undefined) -> 0. @@ -350,8 +353,56 @@ bitvalue(undefined) -> 0. -spec(encode_properties/1 :: (amqp_method_record()) -> binary()). -spec(lookup_amqp_exception/1 :: (amqp_exception()) -> {boolean(), amqp_exception_code(), binary()}). -spec(amqp_exception/1 :: (amqp_exception_code()) -> amqp_exception()). +-endif. % use_specs + +-ifdef(use_specs). +-type(amqp_field_type() :: + 'longstr' | 'signedint' | 'decimal' | 'timestamp' | + 'table' | 'byte' | 'double' | 'float' | 'long' | + 'short' | 'bool' | 'binary' | 'void'). +-type(amqp_property_type() :: + 'shortstr' | 'longstr' | 'octet' | 'shortint' | 'longint' | + 'longlongint' | 'timestamp' | 'bit' | 'table'). +%% we could make this more precise but ultimately are limited by +%% dialyzer's lack of support for recursive types +-type(amqp_table() :: [{binary(), amqp_field_type(), any()}]). +%% TODO: make this more precise +-type(amqp_properties() :: tuple()). +-type(resource_name() :: binary()). +-type(vhost() :: binary()). +-type(ctag() :: binary()). +-type(binding_key() :: binary()). + -endif. % use_specs """ + print "-ifdef(use_specs)." + print "%% Various types" + print prettyType("amqp_method_name()", + [m.erlangName() for m in methods]) + print prettyType("amqp_method()", + ["{%s, %s}" % (m.klass.index, m.index) for m in methods], + 6) + print prettyType("amqp_method_record()", + ["#%s{}" % (m.erlangName()) for m in methods]) + fieldNames = set() + for m in methods: + fieldNames.update(m.arguments) + fieldNames = [erlangize(f.name) for f in fieldNames] + print prettyType("amqp_method_field_name()", + fieldNames) + print prettyType("amqp_property_record()", + ["#'P_%s'{}" % erlangize(c.name) for c in spec.allClasses()]) + print prettyType("amqp_exception()", + ["'%s'" % erlangConstantName(c).lower() for (c, v, cls) in spec.constants]) + print prettyType("amqp_exception_code()", + ["%i" % v for (c, v, cls) in spec.constants]) + classIds = set() + for m in spec.allMethods(): + classIds.add(m.klass.index) + print prettyType("amqp_class_id()", + ["%i" % ci for ci in classIds]) + print "-endif. % use_specs" + for m in methods: genLookupMethodName(m) print "lookup_method_name({_ClassId, _MethodId} = Id) -> exit({unknown_method_id, Id})." @@ -425,63 +476,13 @@ def genHrl(spec): for c in spec.allClasses(): print "-record('P_%s', {%s})." % (erlangize(c.name), fieldNameList(c.fields)) - print "-ifdef(use_specs)." - print "%% Various types" - print prettyType("amqp_method_name()", - [m.erlangName() for m in methods]) - print prettyType("amqp_method()", - ["{%s, %s}" % (m.klass.index, m.index) for m in methods], - 6) - print prettyType("amqp_method_record()", - ["#%s{}" % (m.erlangName()) for m in methods]) - fieldNames = set() - for m in methods: - fieldNames.update(m.arguments) - fieldNames = [erlangize(f.name) for f in fieldNames] - print prettyType("amqp_method_field_name()", - fieldNames) - print prettyType("amqp_property_record()", - ["#'P_%s'{}" % erlangize(c.name) for c in spec.allClasses()]) - print prettyType("amqp_exception()", - ["'%s'" % erlangConstantName(c).lower() for (c, v, cls) in spec.constants]) - print prettyType("amqp_exception_code()", - ["%i" % v for (c, v, cls) in spec.constants]) - print "-endif. % use_specs" def genSpec(spec): methods = spec.allMethods() printFileHeader() print """% Hard-coded types --type(amqp_field_type() :: - 'longstr' | 'signedint' | 'decimal' | 'timestamp' | - 'table' | 'byte' | 'double' | 'float' | 'long' | - 'short' | 'bool' | 'binary' | 'void'). --type(amqp_property_type() :: - 'shortstr' | 'longstr' | 'octet' | 'shortint' | 'longint' | - 'longlongint' | 'timestamp' | 'bit' | 'table'). -%% we could make this more precise but ultimately are limited by -%% dialyzer's lack of support for recursive types --type(amqp_table() :: [{binary(), amqp_field_type(), any()}]). -%% TODO: make this more precise --type(amqp_properties() :: tuple()). - --type(channel_number() :: non_neg_integer()). --type(resource_name() :: binary()). --type(routing_key() :: binary()). --type(username() :: binary()). --type(password() :: binary()). --type(vhost() :: binary()). --type(ctag() :: binary()). --type(exchange_type() :: atom()). --type(binding_key() :: binary()). """ - print "% Auto-generated types" - classIds = set() - for m in spec.allMethods(): - classIds.add(m.klass.index) - print prettyType("amqp_class_id()", - ["%i" % ci for ci in classIds]) def generateErl(specPath): genErl(AmqpSpec(specPath)) diff --git a/include/rabbit.hrl b/include/rabbit.hrl index 9f981d7f..3fd52568 100644 --- a/include/rabbit.hrl +++ b/include/rabbit.hrl @@ -68,114 +68,10 @@ -record(ssl_socket, {tcp, ssl}). -record(delivery, {mandatory, immediate, txn, sender, message}). - -record(amqp_error, {name, explanation, method = none}). %%---------------------------------------------------------------------------- --ifdef(use_specs). - --include("rabbit_framing_spec.hrl"). - --type(maybe(T) :: T | 'none'). --type(erlang_node() :: atom()). --type(node_type() :: disc_only | disc | ram | unknown). --type(ssl_socket() :: #ssl_socket{}). --type(socket() :: inet:ip_port() | ssl_socket()). --type(thunk(T) :: fun(() -> T)). --type(info_key() :: atom()). --type(info() :: {info_key(), any()}). --type(regexp() :: binary()). - -%% this is really an abstract type, but dialyzer does not support them --type(guid() :: binary()). --type(txn() :: guid()). --type(pkey() :: guid()). --type(r(Kind) :: - #resource{virtual_host :: vhost(), - kind :: Kind, - name :: resource_name()}). --type(queue_name() :: r('queue')). --type(exchange_name() :: r('exchange')). --type(user() :: - #user{username :: username(), - password :: password()}). --type(permission() :: - #permission{configure :: regexp(), - write :: regexp(), - read :: regexp()}). --type(amqqueue() :: - #amqqueue{name :: queue_name(), - durable :: boolean(), - auto_delete :: boolean(), - exclusive_owner :: maybe(pid()), - arguments :: amqp_table(), - pid :: maybe(pid())}). --type(exchange() :: - #exchange{name :: exchange_name(), - type :: exchange_type(), - durable :: boolean(), - auto_delete :: boolean(), - arguments :: amqp_table()}). --type(binding() :: - #binding{exchange_name :: exchange_name(), - queue_name :: queue_name(), - key :: binding_key()}). -%% TODO: make this more precise by tying specific class_ids to -%% specific properties --type(undecoded_content() :: - #content{class_id :: amqp_class_id(), - properties :: 'none', - properties_bin :: binary(), - payload_fragments_rev :: [binary()]} | - #content{class_id :: amqp_class_id(), - properties :: amqp_properties(), - properties_bin :: 'none', - payload_fragments_rev :: [binary()]}). --type(unencoded_content() :: undecoded_content()). --type(decoded_content() :: - #content{class_id :: amqp_class_id(), - properties :: amqp_properties(), - properties_bin :: maybe(binary()), - payload_fragments_rev :: [binary()]}). --type(encoded_content() :: - #content{class_id :: amqp_class_id(), - properties :: maybe(amqp_properties()), - properties_bin :: binary(), - payload_fragments_rev :: [binary()]}). --type(content() :: undecoded_content() | decoded_content()). --type(basic_message() :: - #basic_message{exchange_name :: exchange_name(), - routing_key :: routing_key(), - content :: content(), - guid :: guid(), - is_persistent :: boolean()}). --type(message() :: basic_message()). --type(delivery() :: - #delivery{mandatory :: boolean(), - immediate :: boolean(), - txn :: maybe(txn()), - sender :: pid(), - message :: message()}). -%% this really should be an abstract type --type(msg_id() :: non_neg_integer()). --type(qmsg() :: {queue_name(), pid(), msg_id(), boolean(), message()}). --type(listener() :: - #listener{node :: erlang_node(), - protocol :: atom(), - host :: inet:hostname(), - port :: inet:ip_port()}). --type(not_found() :: {'error', 'not_found'}). --type(routing_result() :: 'routed' | 'unroutable' | 'not_delivered'). --type(amqp_error() :: - #amqp_error{name :: atom(), - explanation :: string(), - method :: atom()}). - --endif. - -%%---------------------------------------------------------------------------- - -define(COPYRIGHT_MESSAGE, "Copyright (C) 2007-2010 LShift Ltd., Cohesive Financial Technologies LLC., and Rabbit Technologies Ltd."). -define(INFORMATION_MESSAGE, "Licensed under the MPL. See http://www.rabbitmq.com/"). -define(ERTS_MINIMUM, "5.6.3"). diff --git a/include/rabbit_backing_queue_spec.hrl b/include/rabbit_backing_queue_spec.hrl index 55cd126e..0cef2379 100644 --- a/include/rabbit_backing_queue_spec.hrl +++ b/include/rabbit_backing_queue_spec.hrl @@ -31,26 +31,26 @@ -type(fetch_result() :: %% Message, IsDelivered, AckTag, Remaining_Len - ('empty'|{basic_message(), boolean(), ack(), non_neg_integer()})). + ('empty'|{rabbit:basic_message(), boolean(), ack(), non_neg_integer()})). -type(is_durable() :: boolean()). -type(attempt_recovery() :: boolean()). -type(purged_msg_count() :: non_neg_integer()). -type(ack_required() :: boolean()). --spec(start/1 :: ([queue_name()]) -> 'ok'). --spec(init/3 :: (queue_name(), is_durable(), attempt_recovery()) -> state()). +-spec(start/1 :: ([rabbit_amqqueue:name()]) -> 'ok'). +-spec(init/3 :: (rabbit_amqqueue:name(), is_durable(), attempt_recovery()) -> state()). -spec(terminate/1 :: (state()) -> state()). -spec(delete_and_terminate/1 :: (state()) -> state()). -spec(purge/1 :: (state()) -> {purged_msg_count(), state()}). --spec(publish/2 :: (basic_message(), state()) -> state()). +-spec(publish/2 :: (rabbit:basic_message(), state()) -> state()). -spec(publish_delivered/3 :: - (ack_required(), basic_message(), state()) -> {ack(), state()}). + (ack_required(), rabbit:basic_message(), state()) -> {ack(), state()}). -spec(fetch/2 :: (ack_required(), state()) -> {fetch_result(), state()}). -spec(ack/2 :: ([ack()], state()) -> state()). --spec(tx_publish/3 :: (txn(), basic_message(), state()) -> state()). --spec(tx_ack/3 :: (txn(), [ack()], state()) -> state()). --spec(tx_rollback/2 :: (txn(), state()) -> {[ack()], state()}). --spec(tx_commit/3 :: (txn(), fun (() -> any()), state()) -> {[ack()], state()}). +-spec(tx_publish/3 :: (rabbit:txn(), rabbit:basic_message(), state()) -> state()). +-spec(tx_ack/3 :: (rabbit:txn(), [ack()], state()) -> state()). +-spec(tx_rollback/2 :: (rabbit:txn(), state()) -> {[ack()], state()}). +-spec(tx_commit/3 :: (rabbit:txn(), fun (() -> any()), state()) -> {[ack()], state()}). -spec(requeue/2 :: ([ack()], state()) -> state()). -spec(len/1 :: (state()) -> non_neg_integer()). -spec(is_empty/1 :: (state()) -> boolean()). diff --git a/include/rabbit_exchange_type_spec.hrl b/include/rabbit_exchange_type_spec.hrl index cb564365..00de0d41 100644 --- a/include/rabbit_exchange_type_spec.hrl +++ b/include/rabbit_exchange_type_spec.hrl @@ -31,13 +31,19 @@ -ifdef(use_specs). -spec(description/0 :: () -> [{atom(), any()}]). --spec(publish/2 :: (exchange(), delivery()) -> {routing_result(), [pid()]}). --spec(validate/1 :: (exchange()) -> 'ok'). --spec(create/1 :: (exchange()) -> 'ok'). --spec(recover/2 :: (exchange(), list(binding())) -> 'ok'). --spec(delete/2 :: (exchange(), list(binding())) -> 'ok'). --spec(add_binding/2 :: (exchange(), binding()) -> 'ok'). --spec(remove_bindings/2 :: (exchange(), list(binding())) -> 'ok'). --spec(assert_args_equivalence/2 :: (exchange(), amqp_table()) -> 'ok'). +-spec(publish/2 :: (rabbit_exchange:exchange(), rabbit:delivery()) + -> {rabbit:routing_result(), [pid()]}). +-spec(validate/1 :: (rabbit_exchange:exchange()) -> 'ok'). +-spec(create/1 :: (rabbit_exchange:exchange()) -> 'ok'). +-spec(recover/2 :: (rabbit_exchange:exchange(), + list(rabbit:binding())) -> 'ok'). +-spec(delete/2 :: (rabbit_exchange:exchange(), + list(rabbit:binding())) -> 'ok'). +-spec(add_binding/2 :: (rabbit_exchange:exchange(), + rabbit:binding()) -> 'ok'). +-spec(remove_bindings/2 :: (rabbit_exchange:exchange(), + list(rabbit:binding())) -> 'ok'). +-spec(assert_args_equivalence/2 :: (rabbit_exchange:exchange(), + rabbit_framing:amqp_table()) -> 'ok'). -endif. diff --git a/src/rabbit.erl b/src/rabbit.erl index 7ae0b160..9d826760 100644 --- a/src/rabbit.erl +++ b/src/rabbit.erl @@ -39,6 +39,12 @@ -export([log_location/1]). +-export_type([regexp/0, vhost/0, txn/0, resource_name/0, thunk/1, + maybe/1, + msg_id/0, ctag/0, erlang_node/0, message/0, basic_message/0, + delivery/0, content/0, decoded_content/0, encoded_content/0, + unencoded_content/0]). + %%--------------------------------------------------------------------------- %% Boot steps. -export([maybe_insert_default_data/0]). @@ -183,6 +189,67 @@ -ifdef(use_specs). +-include("rabbit_framing_spec.hrl"). + +-type(maybe(T) :: T | 'none'). +-type(erlang_node() :: atom()). +-type(thunk(T) :: fun(() -> T)). +-type(regexp() :: binary()). + +%% TODO: make this more precise by tying specific class_ids to +%% specific properties +-type(undecoded_content() :: + #content{class_id :: rabbit_framing:amqp_class_id(), + properties :: 'none', + properties_bin :: binary(), + payload_fragments_rev :: [binary()]} | + #content{class_id :: rabbit_framing:amqp_class_id(), + properties :: amqp_properties(), + properties_bin :: 'none', + payload_fragments_rev :: [binary()]}). +-type(unencoded_content() :: undecoded_content()). +-type(decoded_content() :: + #content{class_id :: rabbit_framing:amqp_class_id(), + properties :: amqp_properties(), + properties_bin :: rabbit:maybe(binary()), + payload_fragments_rev :: [binary()]}). +-type(encoded_content() :: + #content{class_id :: rabbit_framing:amqp_class_id(), + properties :: rabbit:maybe(amqp_properties()), + properties_bin :: binary(), + payload_fragments_rev :: [binary()]}). +-type(content() :: undecoded_content() | decoded_content()). +-type(basic_message() :: + #basic_message{exchange_name :: rabbit_exchange:name(), + routing_key :: rabbit_router:routing_key(), + content :: content(), + guid :: rabbit_guid:guid(), + is_persistent :: boolean()}). +-type(message() :: basic_message()). +-type(delivery() :: + #delivery{mandatory :: boolean(), + immediate :: boolean(), + txn :: rabbit:maybe(rabbit:txn()), + sender :: pid(), + message :: message()}). + +%% this is really an abstract type, but dialyzer does not support them +-type(txn() :: rabbit_guid:guid()). +-type(permission() :: + #permission{configure :: regexp(), + write :: regexp(), + read :: regexp()}). +-type(binding() :: + #binding{exchange_name :: rabbit_exchange:name(), + queue_name :: rabbit_amqqueue:name(), + key :: binding_key()}). +%% this really should be an abstract type +-type(msg_id() :: non_neg_integer()). +-type(listener() :: + #listener{node :: erlang_node(), + protocol :: atom(), + host :: inet:hostname(), + port :: inet:ip_port()}). -type(log_location() :: 'tty' | 'undefined' | file:filename()). -type(file_suffix() :: binary()). @@ -193,7 +260,7 @@ -spec(rotate_logs/1 :: (file_suffix()) -> 'ok' | {'error', any()}). -spec(status/0 :: () -> [{running_applications, [{atom(), string(), string()}]} | - {nodes, [{node_type(), [erlang_node()]}]} | + {nodes, [{rabbit_mnesia:node_type(), [erlang_node()]}]} | {running_nodes, [erlang_node()]}]). -spec(log_location/1 :: ('sasl' | 'kernel') -> log_location()). diff --git a/src/rabbit_access_control.erl b/src/rabbit_access_control.erl index a445f441..1658b5c5 100644 --- a/src/rabbit_access_control.erl +++ b/src/rabbit_access_control.erl @@ -46,27 +46,37 @@ -ifdef(use_specs). -type(permission_atom() :: 'configure' | 'read' | 'write'). +-type(username() :: binary()). +-type(password() :: binary()). +-type(user() :: + #user{username :: username(), + password :: password()}). -spec(check_login/2 :: (binary(), binary()) -> user()). -spec(user_pass_login/2 :: (username(), password()) -> user()). --spec(check_vhost_access/2 :: (user(), vhost()) -> 'ok'). +-spec(check_vhost_access/2 :: (user(), rabbit:vhost()) -> 'ok'). -spec(check_resource_access/3 :: - (username(), r(atom()), permission_atom()) -> 'ok'). + (username(), rabbit:r(atom()), permission_atom()) -> 'ok'). -spec(add_user/2 :: (username(), password()) -> 'ok'). -spec(delete_user/1 :: (username()) -> 'ok'). -spec(change_password/2 :: (username(), password()) -> 'ok'). -spec(list_users/0 :: () -> [username()]). --spec(lookup_user/1 :: (username()) -> {'ok', user()} | not_found()). --spec(add_vhost/1 :: (vhost()) -> 'ok'). --spec(delete_vhost/1 :: (vhost()) -> 'ok'). --spec(list_vhosts/0 :: () -> [vhost()]). +-spec(lookup_user/1 :: (username()) -> + {'ok', user()} | rabbit:not_found()). +-spec(add_vhost/1 :: (rabbit:vhost()) -> 'ok'). +-spec(delete_vhost/1 :: (rabbit:vhost()) -> 'ok'). +-spec(list_vhosts/0 :: () -> [rabbit:vhost()]). -spec(set_permissions/5 :: - (username(), vhost(), regexp(), regexp(), regexp()) -> 'ok'). --spec(clear_permissions/2 :: (username(), vhost()) -> 'ok'). + (username(), rabbit:vhost(), rabbit:regexp(), + rabbit:regexp(), rabbit:regexp() + ) -> 'ok'). +-spec(clear_permissions/2 :: (username(), rabbit:vhost()) -> 'ok'). -spec(list_vhost_permissions/1 :: - (vhost()) -> [{username(), regexp(), regexp(), regexp()}]). + (rabbit:vhost()) -> [{username(), rabbit:regexp(), + rabbit:regexp(), rabbit:regexp()}]). -spec(list_user_permissions/1 :: - (username()) -> [{vhost(), regexp(), regexp(), regexp()}]). + (username()) -> [{rabbit:vhost(), rabbit:regexp(), + rabbit:regexp(), rabbit:regexp()}]). -endif. diff --git a/src/rabbit_amqqueue.erl b/src/rabbit_amqqueue.erl index f0e536b5..eef3a39b 100644 --- a/src/rabbit_amqqueue.erl +++ b/src/rabbit_amqqueue.erl @@ -58,27 +58,41 @@ -ifdef(use_specs). --type(qstats() :: {'ok', queue_name(), non_neg_integer(), non_neg_integer()}). + +-type(info_key() :: atom()). +-type(info() :: {info_key(), any()}). + +-type(name() :: rabbit:r('queue')). +-type(amqqueue() :: + #amqqueue{name :: name(), + durable :: boolean(), + auto_delete :: boolean(), + exclusive_owner :: rabbit:maybe(pid()), + arguments :: rabbit_framing:amqp_table(), + pid :: rabbit:maybe(pid())}). + +-type(qstats() :: {'ok', name(), non_neg_integer(), non_neg_integer()}). -type(qlen() :: {'ok', non_neg_integer()}). -type(qfun(A) :: fun ((amqqueue()) -> A)). +-type(qmsg() :: {name(), pid(), rabbit:msg_id(), boolean(), rabbit:message()}). -type(ok_or_errors() :: 'ok' | {'error', [{'error' | 'exit' | 'throw', any()}]}). -spec(start/0 :: () -> 'ok'). --spec(declare/5 :: (queue_name(), boolean(), boolean(), amqp_table(), - maybe(pid())) -> {'new' | 'existing', amqqueue()}). --spec(lookup/1 :: (queue_name()) -> {'ok', amqqueue()} | not_found()). --spec(with/2 :: (queue_name(), qfun(A)) -> A | not_found()). --spec(with_or_die/2 :: (queue_name(), qfun(A)) -> A). --spec(list/1 :: (vhost()) -> [amqqueue()]). +-spec(declare/5 :: (name(), boolean(), boolean(), rabbit_framing:amqp_table(), + rabbit:maybe(pid())) -> {'new' | 'existing', amqqueue()}). +-spec(lookup/1 :: (name()) -> {'ok', amqqueue()} | rabbit:not_found()). +-spec(with/2 :: (name(), qfun(A)) -> A | rabbit:not_found()). +-spec(with_or_die/2 :: (name(), qfun(A)) -> A). +-spec(list/1 :: (rabbit:vhost()) -> [amqqueue()]). -spec(info_keys/0 :: () -> [info_key()]). -spec(info/1 :: (amqqueue()) -> [info()]). -spec(info/2 :: (amqqueue(), [info_key()]) -> [info()]). --spec(info_all/1 :: (vhost()) -> [[info()]]). --spec(info_all/2 :: (vhost(), [info_key()]) -> [[info()]]). --spec(consumers/1 :: (amqqueue()) -> [{pid(), ctag(), boolean()}]). +-spec(info_all/1 :: (rabbit:vhost()) -> [[info()]]). +-spec(info_all/2 :: (rabbit:vhost(), [info_key()]) -> [[info()]]). +-spec(consumers/1 :: (amqqueue()) -> [{pid(), rabbit:ctag(), boolean()}]). -spec(consumers_all/1 :: - (vhost()) -> [{queue_name(), pid(), ctag(), boolean()}]). + (rabbit:vhost()) -> [{name(), pid(), rabbit:ctag(), boolean()}]). -spec(stat/1 :: (amqqueue()) -> qstats()). -spec(stat_all/0 :: () -> [qstats()]). -spec(delete/3 :: @@ -89,30 +103,30 @@ {'error', 'in_use'} | {'error', 'not_empty'}). -spec(purge/1 :: (amqqueue()) -> qlen()). --spec(deliver/2 :: (pid(), delivery()) -> boolean()). --spec(requeue/3 :: (pid(), [msg_id()], pid()) -> 'ok'). --spec(ack/4 :: (pid(), maybe(txn()), [msg_id()], pid()) -> 'ok'). --spec(commit_all/3 :: ([pid()], txn(), pid()) -> ok_or_errors()). --spec(rollback_all/3 :: ([pid()], txn(), pid()) -> 'ok'). +-spec(deliver/2 :: (pid(), rabbit:delivery()) -> boolean()). +-spec(requeue/3 :: (pid(), [rabbit:msg_id()], pid()) -> 'ok'). +-spec(ack/4 :: (pid(), rabbit:maybe(rabbit:txn()), [rabbit:msg_id()], pid()) -> 'ok'). +-spec(commit_all/3 :: ([pid()], rabbit:txn(), pid()) -> ok_or_errors()). +-spec(rollback_all/3 :: ([pid()], rabbit:txn(), pid()) -> 'ok'). -spec(notify_down_all/2 :: ([pid()], pid()) -> ok_or_errors()). -spec(limit_all/3 :: ([pid()], pid(), pid() | 'undefined') -> ok_or_errors()). -spec(basic_get/3 :: (amqqueue(), pid(), boolean()) -> {'ok', non_neg_integer(), qmsg()} | 'empty'). -spec(basic_consume/7 :: - (amqqueue(), boolean(), pid(), pid() | 'undefined', ctag(), + (amqqueue(), boolean(), pid(), pid() | 'undefined', rabbit:ctag(), boolean(), any()) -> 'ok' | {'error', 'exclusive_consume_unavailable'}). --spec(basic_cancel/4 :: (amqqueue(), pid(), ctag(), any()) -> 'ok'). +-spec(basic_cancel/4 :: (amqqueue(), pid(), rabbit:ctag(), any()) -> 'ok'). -spec(notify_sent/2 :: (pid(), pid()) -> 'ok'). -spec(unblock/2 :: (pid(), pid()) -> 'ok'). -spec(flush_all/2 :: ([pid()], pid()) -> 'ok'). -spec(internal_declare/2 :: (amqqueue(), boolean()) -> amqqueue() | 'not_found'). --spec(internal_delete/1 :: (queue_name()) -> 'ok' | not_found()). +-spec(internal_delete/1 :: (name()) -> 'ok' | rabbit:not_found()). -spec(maybe_run_queue_via_backing_queue/2 :: (pid(), (fun ((A) -> A))) -> 'ok'). -spec(update_ram_duration/1 :: (pid()) -> 'ok'). -spec(set_ram_duration_target/2 :: (pid(), number() | 'infinity') -> 'ok'). -spec(set_maximum_since_use/2 :: (pid(), non_neg_integer()) -> 'ok'). --spec(on_node_down/1 :: (erlang_node()) -> 'ok'). +-spec(on_node_down/1 :: (rabbit:erlang_node()) -> 'ok'). -spec(pseudo_queue/2 :: (binary(), pid()) -> amqqueue()). -endif. diff --git a/src/rabbit_basic.erl b/src/rabbit_basic.erl index 4ab7a2a0..cec392cf 100644 --- a/src/rabbit_basic.erl +++ b/src/rabbit_basic.erl @@ -42,24 +42,27 @@ -ifdef(use_specs). --type(properties_input() :: (amqp_properties() | [{atom(), any()}])). --type(publish_result() :: ({ok, routing_result(), [pid()]} | not_found())). - --spec(publish/1 :: (delivery()) -> publish_result()). --spec(delivery/4 :: (boolean(), boolean(), maybe(txn()), message()) -> - delivery()). --spec(message/4 :: (exchange_name(), routing_key(), properties_input(), - binary()) -> (message() | {'error', any()})). --spec(properties/1 :: (properties_input()) -> amqp_properties()). --spec(publish/4 :: (exchange_name(), routing_key(), properties_input(), - binary()) -> publish_result()). --spec(publish/7 :: (exchange_name(), routing_key(), boolean(), boolean(), - maybe(txn()), properties_input(), binary()) -> - publish_result()). --spec(build_content/2 :: (amqp_properties(), binary()) -> content()). --spec(from_content/1 :: (content()) -> {amqp_properties(), binary()}). +-type(properties_input() :: (rabbit:amqp_properties() | [{atom(), any()}])). +-type(publish_result() :: ({ok, rabbit_router:routing_result(), [pid()]} + | rabbit:not_found())). + +-spec(publish/1 :: (rabbit:delivery()) -> publish_result()). +-spec(delivery/4 :: (boolean(), boolean(), rabbit:maybe(rabbit:txn()), + rabbit:message()) -> rabbit:delivery()). +-spec(message/4 :: (rabbit:exchange_name(), rabbit_router:routing_key(), + properties_input(), binary()) + -> (rabbit:message() | {'error', any()})). +-spec(properties/1 :: (properties_input()) -> rabbit:amqp_properties()). +-spec(publish/4 :: (rabbit:exchange_name(), rabbit_router:routing_key(), + properties_input(), binary()) -> publish_result()). +-spec(publish/7 :: (rabbit:exchange_name(), rabbit_router:routing_key(), boolean(), boolean(), + rabbit:maybe(rabbit:txn()), properties_input(), binary()) -> + publish_result()). +-spec(build_content/2 :: (rabbit_framing:amqp_properties(), binary()) + -> rabbit:content()). +-spec(from_content/1 :: (rabbit:content()) -> {rabbit_framing:amqp_properties(), binary()}). -spec(is_message_persistent/1 :: - (decoded_content()) -> (boolean() | {'invalid', non_neg_integer()})). + (rabbit:decoded_content()) -> (boolean() | {'invalid', non_neg_integer()})). -endif. diff --git a/src/rabbit_binary_generator.erl b/src/rabbit_binary_generator.erl index 81cf3cee..655dfe5c 100644 --- a/src/rabbit_binary_generator.erl +++ b/src/rabbit_binary_generator.erl @@ -57,15 +57,18 @@ -type(frame() :: [binary()]). -spec(build_simple_method_frame/2 :: - (channel_number(), amqp_method_record()) -> frame()). + (rabbit_channel:channel_number(), rabbit_framing:amqp_method_record()) + -> frame()). -spec(build_simple_content_frames/3 :: - (channel_number(), content(), non_neg_integer()) -> [frame()]). + (rabbit_channel:channel_number(), rabbit:content(), non_neg_integer()) + -> [frame()]). -spec(build_heartbeat_frame/0 :: () -> frame()). --spec(generate_table/1 :: (amqp_table()) -> binary()). --spec(encode_properties/2 :: ([amqp_property_type()], [any()]) -> binary()). +-spec(generate_table/1 :: (rabbit:amqp_table()) -> binary()). +-spec(encode_properties/2 :: ([rabbit_framing:amqp_property_type()], [any()]) + -> binary()). -spec(check_empty_content_body_frame_size/0 :: () -> 'ok'). --spec(ensure_content_encoded/1 :: (content()) -> encoded_content()). --spec(clear_encoded_content/1 :: (content()) -> unencoded_content()). +-spec(ensure_content_encoded/1 :: (rabbit:content()) -> rabbit:encoded_content()). +-spec(clear_encoded_content/1 :: (rabbit:content()) -> rabbit:unencoded_content()). -endif. diff --git a/src/rabbit_binary_parser.erl b/src/rabbit_binary_parser.erl index e022a1fa..a8879bea 100644 --- a/src/rabbit_binary_parser.erl +++ b/src/rabbit_binary_parser.erl @@ -42,10 +42,13 @@ -ifdef(use_specs). --spec(parse_table/1 :: (binary()) -> amqp_table()). --spec(parse_properties/2 :: ([amqp_property_type()], binary()) -> [any()]). --spec(ensure_content_decoded/1 :: (content()) -> decoded_content()). --spec(clear_decoded_content/1 :: (content()) -> undecoded_content()). +-spec(parse_table/1 :: (binary()) -> rabbit_framing:amqp_table()). +-spec(parse_properties/2 :: + ([rabbit_framing:amqp_property_type()], binary()) -> [any()]). +-spec(ensure_content_decoded/1 :: + (rabbit:content()) -> rabbit:decoded_content()). +-spec(clear_decoded_content/1 :: + (rabbit:content()) -> rabbit:undecoded_content()). -endif. diff --git a/src/rabbit_channel.erl b/src/rabbit_channel.erl index 179a9a9d..93970fe9 100644 --- a/src/rabbit_channel.erl +++ b/src/rabbit_channel.erl @@ -72,23 +72,26 @@ -ifdef(use_specs). -type(ref() :: any()). +-type(channel_number() :: non_neg_integer()). -spec(start_link/6 :: - (channel_number(), pid(), pid(), username(), vhost(), pid()) -> pid()). --spec(do/2 :: (pid(), amqp_method_record()) -> 'ok'). --spec(do/3 :: (pid(), amqp_method_record(), maybe(content())) -> 'ok'). + (channel_number(), pid(), pid(), rabbit_access_control:username(), + rabbit:vhost(), pid()) -> pid()). +-spec(do/2 :: (pid(), rabbit_framing:amqp_method_record()) -> 'ok'). +-spec(do/3 :: (pid(), rabbit_framing:amqp_method_record(), + rabbit:maybe(rabbit:content())) -> 'ok'). -spec(shutdown/1 :: (pid()) -> 'ok'). --spec(send_command/2 :: (pid(), amqp_method()) -> 'ok'). --spec(deliver/4 :: (pid(), ctag(), boolean(), qmsg()) -> 'ok'). +-spec(send_command/2 :: (pid(), rabbit_framing:amqp_method()) -> 'ok'). +-spec(deliver/4 :: (pid(), rabbit:ctag(), boolean(), rabbit_queue:qmsg()) -> 'ok'). -spec(conserve_memory/2 :: (pid(), boolean()) -> 'ok'). -spec(flushed/2 :: (pid(), pid()) -> 'ok'). -spec(flow_timeout/2 :: (pid(), ref()) -> 'ok'). -spec(list/0 :: () -> [pid()]). --spec(info_keys/0 :: () -> [info_key()]). --spec(info/1 :: (pid()) -> [info()]). --spec(info/2 :: (pid(), [info_key()]) -> [info()]). --spec(info_all/0 :: () -> [[info()]]). --spec(info_all/1 :: ([info_key()]) -> [[info()]]). +-spec(info_keys/0 :: () -> [rabbit:info_key()]). +-spec(info/1 :: (pid()) -> [rabbit:info()]). +-spec(info/2 :: (pid(), [rabbit:info_key()]) -> [rabbit:info()]). +-spec(info_all/0 :: () -> [[rabbit:info()]]). +-spec(info_all/1 :: ([rabbit:info_key()]) -> [[rabbit:info()]]). -endif. diff --git a/src/rabbit_control.erl b/src/rabbit_control.erl index 323d4d2f..4aab0dce 100644 --- a/src/rabbit_control.erl +++ b/src/rabbit_control.erl @@ -44,7 +44,7 @@ -spec(start/0 :: () -> no_return()). -spec(stop/0 :: () -> 'ok'). --spec(action/4 :: (atom(), erlang_node(), [string()], +-spec(action/4 :: (atom(), rabbit:erlang_node(), [string()], fun ((string(), [any()]) -> 'ok')) -> 'ok'). -spec(usage/0 :: () -> no_return()). diff --git a/src/rabbit_exchange.erl b/src/rabbit_exchange.erl index d77bf833..5a721982 100644 --- a/src/rabbit_exchange.erl +++ b/src/rabbit_exchange.erl @@ -43,6 +43,8 @@ -export([assert_args_equivalence/2]). -export([check_type/1]). +-export_type([name/0]). + %% EXTENDED API -export([list_exchange_bindings/1]). -export([list_queue_bindings/1]). @@ -56,6 +58,15 @@ -ifdef(use_specs). +-type(name() :: rabbit:r('exchange')). +-type(exchange() :: + #exchange{name :: name(), + type :: type(), + durable :: boolean(), + auto_delete :: boolean(), + arguments :: rabbit_framing:amqp_table()}). +-type(type() :: atom()). + -type(bind_res() :: 'ok' | {'error', 'queue_not_found' | 'exchange_not_found' | @@ -63,38 +74,37 @@ -type(inner_fun() :: fun((exchange(), queue()) -> any())). -spec(recover/0 :: () -> 'ok'). --spec(declare/5 :: (exchange_name(), exchange_type(), boolean(), boolean(), - amqp_table()) -> exchange()). +-spec(declare/5 :: (name(), type(), boolean(), boolean(), + rabbit_framing:amqp_table()) -> exchange()). -spec(check_type/1 :: (binary()) -> atom()). -spec(assert_equivalence/5 :: (exchange(), atom(), boolean(), boolean(), - amqp_table()) -> 'ok'). --spec(assert_args_equivalence/2 :: (exchange(), amqp_table()) -> 'ok'). --spec(lookup/1 :: (exchange_name()) -> {'ok', exchange()} | not_found()). --spec(lookup_or_die/1 :: (exchange_name()) -> exchange()). --spec(list/1 :: (vhost()) -> [exchange()]). --spec(info_keys/0 :: () -> [info_key()]). --spec(info/1 :: (exchange()) -> [info()]). --spec(info/2 :: (exchange(), [info_key()]) -> [info()]). --spec(info_all/1 :: (vhost()) -> [[info()]]). --spec(info_all/2 :: (vhost(), [info_key()]) -> [[info()]]). --spec(publish/2 :: (exchange(), delivery()) -> {routing_result(), [pid()]}). --spec(add_binding/5 :: - (exchange_name(), queue_name(), routing_key(), amqp_table(), inner_fun()) -> - bind_res()). --spec(delete_binding/5 :: - (exchange_name(), queue_name(), routing_key(), amqp_table(), inner_fun()) -> - bind_res() | {'error', 'binding_not_found'}). --spec(list_bindings/1 :: (vhost()) -> - [{exchange_name(), queue_name(), routing_key(), amqp_table()}]). --spec(delete_queue_bindings/1 :: (queue_name()) -> fun (() -> none())). --spec(delete_transient_queue_bindings/1 :: (queue_name()) -> + rabbit_framing:amqp_table()) -> 'ok'). +-spec(assert_args_equivalence/2 :: (exchange(), rabbit_framing:amqp_table()) -> 'ok'). +-spec(lookup/1 :: (name()) -> {'ok', exchange()} | rabbit:not_found()). +-spec(lookup_or_die/1 :: (name()) -> exchange()). +-spec(list/1 :: (rabbit:vhost()) -> [exchange()]). +-spec(info_keys/0 :: () -> [rabbit:info_key()]). +-spec(info/1 :: (exchange()) -> [rabbit:info()]). +-spec(info/2 :: (exchange(), [rabbit:info_key()]) -> [rabbit:info()]). +-spec(info_all/1 :: (rabbit:vhost()) -> [[rabbit:info()]]). +-spec(info_all/2 :: (rabbit:vhost(), [rabbit:info_key()]) -> [[rabbit:info()]]). +-spec(publish/2 :: (exchange(), rabbit:delivery()) -> {rabbit_router:routing_result(), [pid()]}). +-spec(add_binding/5 :: (name(), rabbit_amqqueue:name(), rabbit_router:routing_key(), + rabbit_framing:amqp_table(), inner_fun()) -> bind_res()). +-spec(delete_binding/5 :: (name(), rabbit_amqqueue:name(), rabbit_router:routing_key(), + rabbit_framing:amqp_table(), inner_fun()) -> + bind_res() | {'error', 'binding_not_found'}). +-spec(list_bindings/1 :: (rabbit:vhost()) -> + [{name(), rabbit_amqqueue:name(), rabbit_router:routing_key(), rabbit_framing:amqp_table()}]). +-spec(delete_queue_bindings/1 :: (rabbit_amqqueue:name()) -> fun (() -> none())). +-spec(delete_transient_queue_bindings/1 :: (rabbit_amqqueue:name()) -> fun (() -> none())). --spec(delete/2 :: (exchange_name(), boolean()) -> - 'ok' | not_found() | {'error', 'in_use'}). --spec(list_queue_bindings/1 :: (queue_name()) -> - [{exchange_name(), routing_key(), amqp_table()}]). --spec(list_exchange_bindings/1 :: (exchange_name()) -> - [{queue_name(), routing_key(), amqp_table()}]). +-spec(delete/2 :: (name(), boolean()) -> + 'ok' | rabbit:not_found() | {'error', 'in_use'}). +-spec(list_queue_bindings/1 :: (rabbit_amqqueue:name()) -> + [{name(), rabbit_router:routing_key(), rabbit_framing:amqp_table()}]). +-spec(list_exchange_bindings/1 :: (name()) -> + [{rabbit_amqqueue:name(), rabbit_router:routing_key(), rabbit_framing:amqp_table()}]). -endif. diff --git a/src/rabbit_exchange_type_headers.erl b/src/rabbit_exchange_type_headers.erl index 315e8000..c748c364 100644 --- a/src/rabbit_exchange_type_headers.erl +++ b/src/rabbit_exchange_type_headers.erl @@ -48,7 +48,8 @@ {enables, kernel_ready}]}). -ifdef(use_specs). --spec(headers_match/2 :: (amqp_table(), amqp_table()) -> boolean()). +-spec(headers_match/2 :: (rabbit_framing:amqp_table(), + rabbit_framing:amqp_table()) -> boolean()). -endif. description() -> diff --git a/src/rabbit_guid.erl b/src/rabbit_guid.erl index 1ae8f7da..a44e0f58 100644 --- a/src/rabbit_guid.erl +++ b/src/rabbit_guid.erl @@ -41,6 +41,8 @@ -export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]). +-export_type([guid/0]). + -define(SERVER, ?MODULE). -define(SERIAL_FILENAME, "rabbit_serial"). @@ -50,6 +52,8 @@ -ifdef(use_specs). +-type(guid() :: binary()). + -spec(start_link/0 :: () -> {'ok', pid()} | 'ignore' | {'error', any()}). -spec(guid/0 :: () -> guid()). -spec(string_guid/1 :: (any()) -> string()). diff --git a/src/rabbit_invariable_queue.erl b/src/rabbit_invariable_queue.erl index a7ca20c8..d3f89ab9 100644 --- a/src/rabbit_invariable_queue.erl +++ b/src/rabbit_invariable_queue.erl @@ -48,9 +48,9 @@ -ifdef(use_specs). --type(ack() :: guid() | 'blank_ack'). +-type(ack() :: rabbit_guid:guid() | 'blank_ack'). -type(state() :: #iv_state { queue :: queue(), - qname :: queue_name(), + qname :: rabbit_amqqueue:name(), len :: non_neg_integer(), pending_ack :: dict() }). diff --git a/src/rabbit_misc.erl b/src/rabbit_misc.erl index 331a9193..ee83e237 100644 --- a/src/rabbit_misc.erl +++ b/src/rabbit_misc.erl @@ -32,6 +32,7 @@ -module(rabbit_misc). -include("rabbit.hrl"). -include("rabbit_framing.hrl"). + -include_lib("kernel/include/file.hrl"). -export([method_record_type/1, polite_pause/0, polite_pause/1]). @@ -72,13 +73,22 @@ -ifdef(use_specs). -type(ok_or_error() :: 'ok' | {'error', any()}). +-type(amqp_error() :: + #amqp_error{name :: atom(), + explanation :: string(), + method :: atom()}). +-type(not_found() :: {'error', 'not_found'}). +-type(r(Kind) :: + #resource{virtual_host :: rabbit:vhost(), + kind :: Kind, + name :: rabbit:resource_name()}). -spec(method_record_type/1 :: (tuple()) -> atom()). -spec(polite_pause/0 :: () -> 'done'). -spec(polite_pause/1 :: (non_neg_integer()) -> 'done'). -spec(die/1 :: (atom()) -> no_return()). -spec(frame_error/2 :: (atom(), binary()) -> no_return()). --spec(amqp_error/4 :: (atom(), string(), [any()], atom()) -> amqp_error()). +-spec(amqp_error/4 :: (atom(), string(), [any()], atom()) -> rabbit_misc:amqp_error()). -spec(protocol_error/3 :: (atom(), string(), [any()]) -> no_return()). -spec(protocol_error/4 :: (atom(), string(), [any()], atom()) -> no_return()). -spec(not_found/1 :: (r(atom())) -> no_return()). @@ -86,31 +96,32 @@ -spec(get_config/2 :: (atom(), A) -> A). -spec(set_config/2 :: (atom(), any()) -> 'ok'). -spec(dirty_read/1 :: ({atom(), any()}) -> {'ok', any()} | not_found()). --spec(r/3 :: (vhost() | r(atom()), K, resource_name()) -> - r(K) when is_subtype(K, atom())). --spec(r/2 :: (vhost(), K) -> #resource{virtual_host :: vhost(), - kind :: K, - name :: '_'} - when is_subtype(K, atom())). --spec(r_arg/4 :: (vhost() | r(atom()), K, amqp_table(), binary()) -> - undefined | r(K) when is_subtype(K, atom())). --spec(rs/1 :: (r(atom())) -> string()). +-spec(r/3 :: (rabbit:vhost() | rabbit:r(atom()), K, rabbit:resource_name()) -> + rabbit:r(K) when is_subtype(K, atom())). +-spec(r/2 :: (rabbit:vhost(), K) -> #resource{virtual_host :: rabbit:vhost(), + kind :: K, + name :: '_'} + when is_subtype(K, atom())). +-spec(r_arg/4 :: (rabbit:vhost() | rabbit:r(atom()), K, rabbit_framing:amqp_table(), binary()) -> + undefined | rabbit:r(K) when is_subtype(K, atom())). +-spec(rs/1 :: (rabbit:r(atom())) -> string()). -spec(enable_cover/0 :: () -> ok_or_error()). -spec(start_cover/1 :: ([{string(), string()} | string()]) -> 'ok'). -spec(report_cover/0 :: () -> 'ok'). -spec(enable_cover/1 :: (file:filename()) -> ok_or_error()). -spec(report_cover/1 :: (file:filename()) -> 'ok'). -spec(throw_on_error/2 :: - (atom(), thunk({error, any()} | {ok, A} | A)) -> A). --spec(with_exit_handler/2 :: (thunk(A), thunk(A)) -> A). + (atom(), rabbit:thunk({error, any()} | {ok, A} | A)) -> A). +-spec(with_exit_handler/2 :: (rabbit:thunk(A), rabbit:thunk(A)) -> A). -spec(filter_exit_map/2 :: (fun ((A) -> B), [A]) -> [B]). --spec(with_user/2 :: (username(), thunk(A)) -> A). --spec(with_vhost/2 :: (vhost(), thunk(A)) -> A). --spec(with_user_and_vhost/3 :: (username(), vhost(), thunk(A)) -> A). --spec(execute_mnesia_transaction/1 :: (thunk(A)) -> A). +-spec(with_user/2 :: (rabbit_access_control:username(), rabbit:thunk(A)) -> A). +-spec(with_vhost/2 :: (rabbit:vhost(), rabbit:thunk(A)) -> A). +-spec(with_user_and_vhost/3 :: (rabbit_access_control:username(), + rabbit:vhost(), rabbit:thunk(A)) -> A). +-spec(execute_mnesia_transaction/1 :: (rabbit:thunk(A)) -> A). -spec(ensure_ok/2 :: (ok_or_error(), atom()) -> 'ok'). --spec(makenode/1 :: ({string(), string()} | string()) -> erlang_node()). --spec(nodeparts/1 :: (erlang_node() | string()) -> {string(), string()}). +-spec(makenode/1 :: ({string(), string()} | string()) -> rabbit:erlang_node()). +-spec(nodeparts/1 :: (rabbit:erlang_node() | string()) -> {string(), string()}). -spec(cookie_hash/0 :: () -> string()). -spec(tcp_name/3 :: (atom(), inet:ip_address(), inet:ip_port()) -> atom()). -spec(intersperse/2 :: (A, [A]) -> [A]). @@ -131,7 +142,7 @@ -spec(unfold/2 :: (fun ((A) -> ({'true', B, A} | 'false')), A) -> {[B], A}). -spec(ceil/1 :: (number()) -> integer()). -spec(queue_fold/3 :: (fun ((any(), B) -> B), B, queue()) -> B). --spec(sort_field_table/1 :: (amqp_table()) -> amqp_table()). +-spec(sort_field_table/1 :: (rabbit_framing:amqp_table()) -> rabbit_framing:amqp_table()). -spec(pid_to_string/1 :: (pid()) -> string()). -spec(string_to_pid/1 :: (string()) -> pid()). -spec(version_compare/2 :: (string(), string()) -> 'lt' | 'eq' | 'gt'). diff --git a/src/rabbit_mnesia.erl b/src/rabbit_mnesia.erl index ba3019be..a3cac45c 100644 --- a/src/rabbit_mnesia.erl +++ b/src/rabbit_mnesia.erl @@ -42,19 +42,22 @@ %% other mnesia-using Erlang applications, such as ejabberd -export([create_tables/0]). +-export_type([node_type/0]). + -include("rabbit.hrl"). %%---------------------------------------------------------------------------- -ifdef(use_specs). --spec(status/0 :: () -> [{'nodes', [{node_type(), [erlang_node()]}]} | - {'running_nodes', [erlang_node()]}]). +-type(node_type() :: disc_only | disc | ram | unknown). +-spec(status/0 :: () -> [{'nodes', [{node_type(), [rabbit:erlang_node()]}]} | + {'running_nodes', [rabbit:erlang_node()]}]). -spec(dir/0 :: () -> file:filename()). -spec(ensure_mnesia_dir/0 :: () -> 'ok'). -spec(init/0 :: () -> 'ok'). -spec(is_db_empty/0 :: () -> boolean()). --spec(cluster/1 :: ([erlang_node()]) -> 'ok'). +-spec(cluster/1 :: ([rabbit:erlang_node()]) -> 'ok'). -spec(reset/0 :: () -> 'ok'). -spec(force_reset/0 :: () -> 'ok'). -spec(is_clustered/0 :: () -> boolean()). diff --git a/src/rabbit_net.erl b/src/rabbit_net.erl index 9abd3ddb..b04adc22 100644 --- a/src/rabbit_net.erl +++ b/src/rabbit_net.erl @@ -43,6 +43,8 @@ 'recv_cnt' | 'recv_max' | 'recv_avg' | 'recv_oct' | 'recv_dvi' | 'send_cnt' | 'send_max' | 'send_avg' | 'send_oct' | 'send_pend'). -type(error() :: {'error', any()}). +-type(ssl_socket() :: #ssl_socket{}). +-type(socket() :: inet:ip_port() | ssl_socket()). -spec(async_recv/3 :: (socket(), integer(), timeout()) -> {'ok', any()}). -spec(close/1 :: (socket()) -> 'ok' | error()). diff --git a/src/rabbit_networking.erl b/src/rabbit_networking.erl index d00b6062..ed396647 100644 --- a/src/rabbit_networking.erl +++ b/src/rabbit_networking.erl @@ -65,20 +65,26 @@ -type(connection() :: pid()). +-type(listener() :: + #listener{node :: rabbit:erlang_node(), + protocol :: atom(), + host :: inet:hostname(), + port :: inet:ip_port()}). + -spec(start/0 :: () -> 'ok'). -spec(start_tcp_listener/2 :: (inet:hostname(), inet:ip_port()) -> 'ok'). --spec(start_ssl_listener/3 :: (inet:hostname(), inet:ip_port(), [info()]) -> 'ok'). +-spec(start_ssl_listener/3 :: (inet:hostname(), inet:ip_port(), [rabbit:info()]) -> 'ok'). -spec(stop_tcp_listener/2 :: (inet:hostname(), inet:ip_port()) -> 'ok'). -spec(active_listeners/0 :: () -> [listener()]). --spec(node_listeners/1 :: (erlang_node()) -> [listener()]). +-spec(node_listeners/1 :: (rabbit:erlang_node()) -> [listener()]). -spec(connections/0 :: () -> [connection()]). --spec(connection_info_keys/0 :: () -> [info_key()]). --spec(connection_info/1 :: (connection()) -> [info()]). --spec(connection_info/2 :: (connection(), [info_key()]) -> [info()]). --spec(connection_info_all/0 :: () -> [[info()]]). --spec(connection_info_all/1 :: ([info_key()]) -> [[info()]]). +-spec(connection_info_keys/0 :: () -> [rabbit:info_key()]). +-spec(connection_info/1 :: (connection()) -> [rabbit:info()]). +-spec(connection_info/2 :: (connection(), [rabbit:info_key()]) -> [rabbit:info()]). +-spec(connection_info_all/0 :: () -> [[rabbit:info()]]). +-spec(connection_info_all/1 :: ([rabbit:info_key()]) -> [[rabbit:info()]]). -spec(close_connection/2 :: (pid(), string()) -> 'ok'). --spec(on_node_down/1 :: (erlang_node()) -> 'ok'). +-spec(on_node_down/1 :: (rabbit:erlang_node()) -> 'ok'). -spec(check_tcp_listener_address/3 :: (atom(), inet:hostname(), inet:ip_port()) -> {inet:ip_address(), atom()}). diff --git a/src/rabbit_persister.erl b/src/rabbit_persister.erl index 8d3c2dc0..727fcd1b 100644 --- a/src/rabbit_persister.erl +++ b/src/rabbit_persister.erl @@ -65,21 +65,23 @@ -ifdef(use_specs). --type(pmsg() :: {queue_name(), pkey()}). +-type(pkey() :: rabbit_guid:guid()). +-type(pmsg() :: {rabbit_amqqueue:name(), pkey()}). + -type(work_item() :: - {publish, message(), pmsg()} | + {publish, rabbit:message(), pmsg()} | {deliver, pmsg()} | {ack, pmsg()}). --spec(start_link/1 :: ([queue_name()]) -> +-spec(start_link/1 :: ([rabbit_amqqueue:name()]) -> {'ok', pid()} | 'ignore' | {'error', any()}). -spec(transaction/1 :: ([work_item()]) -> 'ok'). --spec(extend_transaction/2 :: ({txn(), queue_name()}, [work_item()]) -> 'ok'). +-spec(extend_transaction/2 :: ({rabbit:txn(), rabbit_amqqueue:name()}, [work_item()]) -> 'ok'). -spec(dirty_work/1 :: ([work_item()]) -> 'ok'). --spec(commit_transaction/1 :: ({txn(), queue_name()}) -> 'ok'). --spec(rollback_transaction/1 :: ({txn(), queue_name()}) -> 'ok'). +-spec(commit_transaction/1 :: ({rabbit:txn(), rabbit_amqqueue:name()}) -> 'ok'). +-spec(rollback_transaction/1 :: ({rabbit:txn(), rabbit_amqqueue:name()}) -> 'ok'). -spec(force_snapshot/0 :: () -> 'ok'). --spec(queue_content/1 :: (queue_name()) -> [{message(), boolean()}]). +-spec(queue_content/1 :: (rabbit_amqqueue:name()) -> [{rabbit:message(), boolean()}]). -endif. diff --git a/src/rabbit_reader.erl b/src/rabbit_reader.erl index f2a903dc..a83adcd4 100644 --- a/src/rabbit_reader.erl +++ b/src/rabbit_reader.erl @@ -138,11 +138,11 @@ -ifdef(use_specs). --spec(info_keys/0 :: () -> [info_key()]). --spec(info/1 :: (pid()) -> [info()]). --spec(info/2 :: (pid(), [info_key()]) -> [info()]). +-spec(info_keys/0 :: () -> [rabbit:info_key()]). +-spec(info/1 :: (pid()) -> [rabbit:info()]). +-spec(info/2 :: (pid(), [rabbit:info_key()]) -> [rabbit:info()]). -spec(shutdown/2 :: (pid(), string()) -> 'ok'). --spec(server_properties/0 :: () -> amqp_table()). +-spec(server_properties/0 :: () -> rabbit_framing:amqp_table()). -endif. diff --git a/src/rabbit_reader_queue_collector.erl b/src/rabbit_reader_queue_collector.erl index 8d4e8fdb..01eae523 100644 --- a/src/rabbit_reader_queue_collector.erl +++ b/src/rabbit_reader_queue_collector.erl @@ -47,7 +47,7 @@ -ifdef(use_specs). -spec(start_link/0 :: () -> {'ok', pid()}). --spec(register_exclusive_queue/2 :: (pid(), amqqueue()) -> 'ok'). +-spec(register_exclusive_queue/2 :: (pid(), rabbit_amqqueue:amqqueue()) -> 'ok'). -spec(delete_all/1 :: (pid()) -> 'ok'). -endif. diff --git a/src/rabbit_router.erl b/src/rabbit_router.erl index 75196bc0..8144d4a9 100644 --- a/src/rabbit_router.erl +++ b/src/rabbit_router.erl @@ -41,7 +41,10 @@ -ifdef(use_specs). --spec(deliver/2 :: ([pid()], delivery()) -> {routing_result(), [pid()]}). +-type(routing_key() :: binary()). +-type(routing_result() :: 'routed' | 'unroutable' | 'not_delivered'). + +-spec(deliver/2 :: ([pid()], rabbit:delivery()) -> {routing_result(), [pid()]}). -endif. diff --git a/src/rabbit_writer.erl b/src/rabbit_writer.erl index 3d10dc12..7c826d98 100644 --- a/src/rabbit_writer.erl +++ b/src/rabbit_writer.erl @@ -48,20 +48,28 @@ -ifdef(use_specs). --spec(start/3 :: (socket(), channel_number(), non_neg_integer()) -> pid()). --spec(start_link/3 :: (socket(), channel_number(), non_neg_integer()) -> pid()). --spec(send_command/2 :: (pid(), amqp_method_record()) -> 'ok'). --spec(send_command/3 :: (pid(), amqp_method_record(), content()) -> 'ok'). --spec(send_command_and_signal_back/3 :: (pid(), amqp_method(), pid()) -> 'ok'). +-spec(start/3 :: + (rabbit_net:socket(), rabbit_channel:channel_number(), non_neg_integer()) + -> pid()). +-spec(start_link/3 :: + (rabbit_net:socket(), rabbit_channel:channel_number(), non_neg_integer()) + -> pid()). +-spec(send_command/2 :: (pid(), rabbit_framing:amqp_method_record()) -> 'ok'). +-spec(send_command/3 :: + (pid(), rabbit_framing:amqp_method_record(), rabbit:content()) -> 'ok'). +-spec(send_command_and_signal_back/3 :: + (pid(), rabbit_framing:amqp_method(), pid()) -> 'ok'). -spec(send_command_and_signal_back/4 :: - (pid(), amqp_method(), content(), pid()) -> 'ok'). + (pid(), rabbit_framing:amqp_method(), rabbit:content(), pid()) -> 'ok'). -spec(send_command_and_notify/5 :: - (pid(), pid(), pid(), amqp_method_record(), content()) -> 'ok'). + (pid(), pid(), pid(), rabbit_framing:amqp_method_record(), rabbit:content()) + -> 'ok'). -spec(internal_send_command/3 :: - (socket(), channel_number(), amqp_method_record()) -> 'ok'). + (rabbit_net:socket(), rabbit_channel:channel_number(), rabbit_framing:amqp_method_record()) + -> 'ok'). -spec(internal_send_command/5 :: - (socket(), channel_number(), amqp_method_record(), - content(), non_neg_integer()) -> 'ok'). + (rabbit_net:socket(), rabbit_channel:channel_number(), rabbit_framing:amqp_method_record(), + rabbit:content(), non_neg_integer()) -> 'ok'). -endif. -- cgit v1.2.1 From fd2dda1d51ee7862d1f66dbeaf57fbb42240f674 Mon Sep 17 00:00:00 2001 From: Alexandru Scvortov Date: Fri, 2 Jul 2010 11:51:10 +0100 Subject: redistributed all types from rabbit_framing_spec.hrl and rabbit.hrl --- codegen.py | 15 ++-------- include/rabbit_exchange_type_spec.hrl | 10 +++---- src/rabbit.erl | 27 +++++------------ src/rabbit_access_control.erl | 23 +++++++------- src/rabbit_amqqueue.erl | 39 ++++++++++++------------ src/rabbit_basic.erl | 14 +++++---- src/rabbit_channel.erl | 7 +++-- src/rabbit_exchange.erl | 56 ++++++++++++++++++++++------------- src/rabbit_misc.erl | 28 +++++++++++------- src/rabbit_networking.erl | 3 +- src/rabbit_router.erl | 1 + 11 files changed, 115 insertions(+), 108 deletions(-) diff --git a/codegen.py b/codegen.py index 8317e2b8..5c235e35 100644 --- a/codegen.py +++ b/codegen.py @@ -333,7 +333,8 @@ def genErl(spec): -export([amqp_exception/1]). -export_type([amqp_table/0, amqp_property_type/0, amqp_method_record/0, - amqp_method_name/0, amqp_method/0]). + amqp_method_name/0, amqp_method/0, vhost/0, ctag/0, + resource_name/0, amqp_properties/0, amqp_class_id/0]). bitvalue(true) -> 1; bitvalue(false) -> 0; @@ -371,7 +372,6 @@ bitvalue(undefined) -> 0. -type(resource_name() :: binary()). -type(vhost() :: binary()). -type(ctag() :: binary()). --type(binding_key() :: binary()). -endif. % use_specs """ @@ -477,24 +477,13 @@ def genHrl(spec): print "-record('P_%s', {%s})." % (erlangize(c.name), fieldNameList(c.fields)) -def genSpec(spec): - methods = spec.allMethods() - - printFileHeader() - print """% Hard-coded types -""" - def generateErl(specPath): genErl(AmqpSpec(specPath)) def generateHrl(specPath): genHrl(AmqpSpec(specPath)) -def generateSpec(specPath): - genSpec(AmqpSpec(specPath)) - if __name__ == "__main__": do_main_dict({"header": generateHrl, - "spec": generateSpec, "body": generateErl}) diff --git a/include/rabbit_exchange_type_spec.hrl b/include/rabbit_exchange_type_spec.hrl index 00de0d41..dbbe74f0 100644 --- a/include/rabbit_exchange_type_spec.hrl +++ b/include/rabbit_exchange_type_spec.hrl @@ -32,17 +32,17 @@ -spec(description/0 :: () -> [{atom(), any()}]). -spec(publish/2 :: (rabbit_exchange:exchange(), rabbit:delivery()) - -> {rabbit:routing_result(), [pid()]}). + -> {rabbit_router:routing_result(), [pid()]}). -spec(validate/1 :: (rabbit_exchange:exchange()) -> 'ok'). -spec(create/1 :: (rabbit_exchange:exchange()) -> 'ok'). -spec(recover/2 :: (rabbit_exchange:exchange(), - list(rabbit:binding())) -> 'ok'). + [rabbit_exchange:binding()]) -> 'ok'). -spec(delete/2 :: (rabbit_exchange:exchange(), - list(rabbit:binding())) -> 'ok'). + [rabbit_exchange:binding()]) -> 'ok'). -spec(add_binding/2 :: (rabbit_exchange:exchange(), - rabbit:binding()) -> 'ok'). + rabbit_exchange:binding()) -> 'ok'). -spec(remove_bindings/2 :: (rabbit_exchange:exchange(), - list(rabbit:binding())) -> 'ok'). + [rabbit_exchange:binding()]) -> 'ok'). -spec(assert_args_equivalence/2 :: (rabbit_exchange:exchange(), rabbit_framing:amqp_table()) -> 'ok'). diff --git a/src/rabbit.erl b/src/rabbit.erl index 9d826760..ee295c3b 100644 --- a/src/rabbit.erl +++ b/src/rabbit.erl @@ -39,9 +39,8 @@ -export([log_location/1]). --export_type([regexp/0, vhost/0, txn/0, resource_name/0, thunk/1, - maybe/1, - msg_id/0, ctag/0, erlang_node/0, message/0, basic_message/0, +-export_type([regexp/0, txn/0, thunk/1,maybe/1, info/0, info_key/0, + msg_id/0, erlang_node/0, message/0, basic_message/0, delivery/0, content/0, decoded_content/0, encoded_content/0, unencoded_content/0]). @@ -204,18 +203,18 @@ properties_bin :: binary(), payload_fragments_rev :: [binary()]} | #content{class_id :: rabbit_framing:amqp_class_id(), - properties :: amqp_properties(), + properties :: rabbit_framing:amqp_properties(), properties_bin :: 'none', payload_fragments_rev :: [binary()]}). -type(unencoded_content() :: undecoded_content()). -type(decoded_content() :: #content{class_id :: rabbit_framing:amqp_class_id(), - properties :: amqp_properties(), + properties :: rabbit_framing:amqp_properties(), properties_bin :: rabbit:maybe(binary()), payload_fragments_rev :: [binary()]}). -type(encoded_content() :: #content{class_id :: rabbit_framing:amqp_class_id(), - properties :: rabbit:maybe(amqp_properties()), + properties :: rabbit:maybe(rabbit_framing:amqp_properties()), properties_bin :: binary(), payload_fragments_rev :: [binary()]}). -type(content() :: undecoded_content() | decoded_content()). @@ -235,24 +234,14 @@ %% this is really an abstract type, but dialyzer does not support them -type(txn() :: rabbit_guid:guid()). --type(permission() :: - #permission{configure :: regexp(), - write :: regexp(), - read :: regexp()}). --type(binding() :: - #binding{exchange_name :: rabbit_exchange:name(), - queue_name :: rabbit_amqqueue:name(), - key :: binding_key()}). %% this really should be an abstract type -type(msg_id() :: non_neg_integer()). --type(listener() :: - #listener{node :: erlang_node(), - protocol :: atom(), - host :: inet:hostname(), - port :: inet:ip_port()}). -type(log_location() :: 'tty' | 'undefined' | file:filename()). -type(file_suffix() :: binary()). +-type(info_key() :: atom()). +-type(info() :: {info_key(), any()}). + -spec(prepare/0 :: () -> 'ok'). -spec(start/0 :: () -> 'ok'). -spec(stop/0 :: () -> 'ok'). diff --git a/src/rabbit_access_control.erl b/src/rabbit_access_control.erl index 1658b5c5..08f00ab2 100644 --- a/src/rabbit_access_control.erl +++ b/src/rabbit_access_control.erl @@ -40,6 +40,7 @@ -export([add_vhost/1, delete_vhost/1, list_vhosts/0]). -export([set_permissions/5, clear_permissions/2, list_vhost_permissions/1, list_user_permissions/1]). +-export_type([username/0]). %%---------------------------------------------------------------------------- @@ -54,28 +55,28 @@ -spec(check_login/2 :: (binary(), binary()) -> user()). -spec(user_pass_login/2 :: (username(), password()) -> user()). --spec(check_vhost_access/2 :: (user(), rabbit:vhost()) -> 'ok'). +-spec(check_vhost_access/2 :: (user(), rabbit_framing:vhost()) -> 'ok'). -spec(check_resource_access/3 :: - (username(), rabbit:r(atom()), permission_atom()) -> 'ok'). + (username(), rabbit_misc:r(atom()), permission_atom()) -> 'ok'). -spec(add_user/2 :: (username(), password()) -> 'ok'). -spec(delete_user/1 :: (username()) -> 'ok'). -spec(change_password/2 :: (username(), password()) -> 'ok'). -spec(list_users/0 :: () -> [username()]). -spec(lookup_user/1 :: (username()) -> - {'ok', user()} | rabbit:not_found()). --spec(add_vhost/1 :: (rabbit:vhost()) -> 'ok'). --spec(delete_vhost/1 :: (rabbit:vhost()) -> 'ok'). --spec(list_vhosts/0 :: () -> [rabbit:vhost()]). + {'ok', user()} | rabbit_misc:not_found()). +-spec(add_vhost/1 :: (rabbit_framing:vhost()) -> 'ok'). +-spec(delete_vhost/1 :: (rabbit_framing:vhost()) -> 'ok'). +-spec(list_vhosts/0 :: () -> [rabbit_framing:vhost()]). -spec(set_permissions/5 :: - (username(), rabbit:vhost(), rabbit:regexp(), + (username(), rabbit_framing:vhost(), rabbit:regexp(), rabbit:regexp(), rabbit:regexp() ) -> 'ok'). --spec(clear_permissions/2 :: (username(), rabbit:vhost()) -> 'ok'). +-spec(clear_permissions/2 :: (username(), rabbit_framing:vhost()) -> 'ok'). -spec(list_vhost_permissions/1 :: - (rabbit:vhost()) -> [{username(), rabbit:regexp(), - rabbit:regexp(), rabbit:regexp()}]). + (rabbit_framing:vhost()) -> [{username(), rabbit:regexp(), + rabbit:regexp(), rabbit:regexp()}]). -spec(list_user_permissions/1 :: - (username()) -> [{rabbit:vhost(), rabbit:regexp(), + (username()) -> [{rabbit_framing:vhost(), rabbit:regexp(), rabbit:regexp(), rabbit:regexp()}]). -endif. diff --git a/src/rabbit_amqqueue.erl b/src/rabbit_amqqueue.erl index eef3a39b..af8e1a0d 100644 --- a/src/rabbit_amqqueue.erl +++ b/src/rabbit_amqqueue.erl @@ -58,11 +58,7 @@ -ifdef(use_specs). - --type(info_key() :: atom()). --type(info() :: {info_key(), any()}). - --type(name() :: rabbit:r('queue')). +-type(name() :: rabbit_misc:r('queue')). -type(amqqueue() :: #amqqueue{name :: name(), durable :: boolean(), @@ -81,18 +77,20 @@ -spec(start/0 :: () -> 'ok'). -spec(declare/5 :: (name(), boolean(), boolean(), rabbit_framing:amqp_table(), rabbit:maybe(pid())) -> {'new' | 'existing', amqqueue()}). --spec(lookup/1 :: (name()) -> {'ok', amqqueue()} | rabbit:not_found()). --spec(with/2 :: (name(), qfun(A)) -> A | rabbit:not_found()). +-spec(lookup/1 :: (name()) -> {'ok', amqqueue()} | rabbit_misc:not_found()). +-spec(with/2 :: (name(), qfun(A)) -> A | rabbit_misc:not_found()). -spec(with_or_die/2 :: (name(), qfun(A)) -> A). --spec(list/1 :: (rabbit:vhost()) -> [amqqueue()]). --spec(info_keys/0 :: () -> [info_key()]). --spec(info/1 :: (amqqueue()) -> [info()]). --spec(info/2 :: (amqqueue(), [info_key()]) -> [info()]). --spec(info_all/1 :: (rabbit:vhost()) -> [[info()]]). --spec(info_all/2 :: (rabbit:vhost(), [info_key()]) -> [[info()]]). --spec(consumers/1 :: (amqqueue()) -> [{pid(), rabbit:ctag(), boolean()}]). --spec(consumers_all/1 :: - (rabbit:vhost()) -> [{name(), pid(), rabbit:ctag(), boolean()}]). +-spec(list/1 :: (rabbit_framing:vhost()) -> [amqqueue()]). +-spec(info_keys/0 :: () -> [rabbit:info_key()]). +-spec(info/1 :: (amqqueue()) -> [rabbit:info()]). +-spec(info/2 :: (amqqueue(), [rabbit:info_key()]) -> [rabbit:info()]). +-spec(info_all/1 :: (rabbit_framing:vhost()) -> [[rabbit:info()]]). +-spec(info_all/2 :: (rabbit_framing:vhost(), [rabbit:info_key()]) + -> [[rabbit:info()]]). +-spec(consumers/1 :: + (amqqueue()) -> [{pid(), rabbit_framing:ctag(), boolean()}]). +-spec(consumers_all/1 :: (rabbit_framing:vhost()) + -> [{name(), pid(), rabbit_framing:ctag(), boolean()}]). -spec(stat/1 :: (amqqueue()) -> qstats()). -spec(stat_all/0 :: () -> [qstats()]). -spec(delete/3 :: @@ -105,7 +103,8 @@ -spec(purge/1 :: (amqqueue()) -> qlen()). -spec(deliver/2 :: (pid(), rabbit:delivery()) -> boolean()). -spec(requeue/3 :: (pid(), [rabbit:msg_id()], pid()) -> 'ok'). --spec(ack/4 :: (pid(), rabbit:maybe(rabbit:txn()), [rabbit:msg_id()], pid()) -> 'ok'). +-spec(ack/4 :: (pid(), rabbit:maybe(rabbit:txn()), [rabbit:msg_id()], pid()) + -> 'ok'). -spec(commit_all/3 :: ([pid()], rabbit:txn(), pid()) -> ok_or_errors()). -spec(rollback_all/3 :: ([pid()], rabbit:txn(), pid()) -> 'ok'). -spec(notify_down_all/2 :: ([pid()], pid()) -> ok_or_errors()). @@ -113,15 +112,15 @@ -spec(basic_get/3 :: (amqqueue(), pid(), boolean()) -> {'ok', non_neg_integer(), qmsg()} | 'empty'). -spec(basic_consume/7 :: - (amqqueue(), boolean(), pid(), pid() | 'undefined', rabbit:ctag(), + (amqqueue(), boolean(), pid(), pid() | 'undefined', rabbit_framing:ctag(), boolean(), any()) -> 'ok' | {'error', 'exclusive_consume_unavailable'}). --spec(basic_cancel/4 :: (amqqueue(), pid(), rabbit:ctag(), any()) -> 'ok'). +-spec(basic_cancel/4 :: (amqqueue(), pid(), rabbit_framing:ctag(), any()) -> 'ok'). -spec(notify_sent/2 :: (pid(), pid()) -> 'ok'). -spec(unblock/2 :: (pid(), pid()) -> 'ok'). -spec(flush_all/2 :: ([pid()], pid()) -> 'ok'). -spec(internal_declare/2 :: (amqqueue(), boolean()) -> amqqueue() | 'not_found'). --spec(internal_delete/1 :: (name()) -> 'ok' | rabbit:not_found()). +-spec(internal_delete/1 :: (name()) -> 'ok' | rabbit_misc:not_found()). -spec(maybe_run_queue_via_backing_queue/2 :: (pid(), (fun ((A) -> A))) -> 'ok'). -spec(update_ram_duration/1 :: (pid()) -> 'ok'). -spec(set_ram_duration_target/2 :: (pid(), number() | 'infinity') -> 'ok'). diff --git a/src/rabbit_basic.erl b/src/rabbit_basic.erl index cec392cf..8979b83b 100644 --- a/src/rabbit_basic.erl +++ b/src/rabbit_basic.erl @@ -42,20 +42,22 @@ -ifdef(use_specs). --type(properties_input() :: (rabbit:amqp_properties() | [{atom(), any()}])). +-type(properties_input() :: + (rabbit_framing:amqp_properties() | [{atom(), any()}])). -type(publish_result() :: ({ok, rabbit_router:routing_result(), [pid()]} - | rabbit:not_found())). + | rabbit_misc:not_found())). -spec(publish/1 :: (rabbit:delivery()) -> publish_result()). -spec(delivery/4 :: (boolean(), boolean(), rabbit:maybe(rabbit:txn()), rabbit:message()) -> rabbit:delivery()). --spec(message/4 :: (rabbit:exchange_name(), rabbit_router:routing_key(), +-spec(message/4 :: (rabbit_exchange:name(), rabbit_router:routing_key(), properties_input(), binary()) -> (rabbit:message() | {'error', any()})). --spec(properties/1 :: (properties_input()) -> rabbit:amqp_properties()). --spec(publish/4 :: (rabbit:exchange_name(), rabbit_router:routing_key(), +-spec(properties/1 :: + (properties_input()) -> rabbit_framing:amqp_properties()). +-spec(publish/4 :: (rabbit_exchange:name(), rabbit_router:routing_key(), properties_input(), binary()) -> publish_result()). --spec(publish/7 :: (rabbit:exchange_name(), rabbit_router:routing_key(), boolean(), boolean(), +-spec(publish/7 :: (rabbit_exchange:name(), rabbit_router:routing_key(), boolean(), boolean(), rabbit:maybe(rabbit:txn()), properties_input(), binary()) -> publish_result()). -spec(build_content/2 :: (rabbit_framing:amqp_properties(), binary()) diff --git a/src/rabbit_channel.erl b/src/rabbit_channel.erl index 93970fe9..080c4c99 100644 --- a/src/rabbit_channel.erl +++ b/src/rabbit_channel.erl @@ -44,6 +44,8 @@ -export([init/1, terminate/2, code_change/3, handle_call/3, handle_cast/2, handle_info/2, handle_pre_hibernate/1]). +-export_type([channel_number/0]). + -record(ch, {state, channel, reader_pid, writer_pid, limiter_pid, transaction_id, tx_participants, next_tag, uncommitted_ack_q, unacked_message_q, @@ -76,13 +78,14 @@ -spec(start_link/6 :: (channel_number(), pid(), pid(), rabbit_access_control:username(), - rabbit:vhost(), pid()) -> pid()). + rabbit_framing:vhost(), pid()) -> pid()). -spec(do/2 :: (pid(), rabbit_framing:amqp_method_record()) -> 'ok'). -spec(do/3 :: (pid(), rabbit_framing:amqp_method_record(), rabbit:maybe(rabbit:content())) -> 'ok'). -spec(shutdown/1 :: (pid()) -> 'ok'). -spec(send_command/2 :: (pid(), rabbit_framing:amqp_method()) -> 'ok'). --spec(deliver/4 :: (pid(), rabbit:ctag(), boolean(), rabbit_queue:qmsg()) -> 'ok'). +-spec(deliver/4 :: + (pid(), rabbit_framing:ctag(), boolean(), rabbit_queue:qmsg()) -> 'ok'). -spec(conserve_memory/2 :: (pid(), boolean()) -> 'ok'). -spec(flushed/2 :: (pid(), pid()) -> 'ok'). -spec(flow_timeout/2 :: (pid(), ref()) -> 'ok'). diff --git a/src/rabbit_exchange.erl b/src/rabbit_exchange.erl index 5a721982..e109158b 100644 --- a/src/rabbit_exchange.erl +++ b/src/rabbit_exchange.erl @@ -43,7 +43,7 @@ -export([assert_args_equivalence/2]). -export([check_type/1]). --export_type([name/0]). +-export_type([name/0, exchange/0, binding/0]). %% EXTENDED API -export([list_exchange_bindings/1]). @@ -58,7 +58,7 @@ -ifdef(use_specs). --type(name() :: rabbit:r('exchange')). +-type(name() :: rabbit_misc:r('exchange')). -type(exchange() :: #exchange{name :: name(), type :: type(), @@ -66,6 +66,12 @@ auto_delete :: boolean(), arguments :: rabbit_framing:amqp_table()}). -type(type() :: atom()). +-type(binding_key() :: binary()). +-type(binding() :: + #binding{exchange_name :: name(), + queue_name :: rabbit_amqqueue:name(), + key :: binding_key()}). + -type(bind_res() :: 'ok' | {'error', 'queue_not_found' | @@ -79,32 +85,42 @@ -spec(check_type/1 :: (binary()) -> atom()). -spec(assert_equivalence/5 :: (exchange(), atom(), boolean(), boolean(), rabbit_framing:amqp_table()) -> 'ok'). --spec(assert_args_equivalence/2 :: (exchange(), rabbit_framing:amqp_table()) -> 'ok'). --spec(lookup/1 :: (name()) -> {'ok', exchange()} | rabbit:not_found()). +-spec(assert_args_equivalence/2 :: + (exchange(), rabbit_framing:amqp_table()) -> 'ok'). +-spec(lookup/1 :: (name()) + -> {'ok', exchange()} | rabbit_misc:not_found()). -spec(lookup_or_die/1 :: (name()) -> exchange()). --spec(list/1 :: (rabbit:vhost()) -> [exchange()]). +-spec(list/1 :: (rabbit_framing:vhost()) -> [exchange()]). -spec(info_keys/0 :: () -> [rabbit:info_key()]). -spec(info/1 :: (exchange()) -> [rabbit:info()]). -spec(info/2 :: (exchange(), [rabbit:info_key()]) -> [rabbit:info()]). --spec(info_all/1 :: (rabbit:vhost()) -> [[rabbit:info()]]). --spec(info_all/2 :: (rabbit:vhost(), [rabbit:info_key()]) -> [[rabbit:info()]]). --spec(publish/2 :: (exchange(), rabbit:delivery()) -> {rabbit_router:routing_result(), [pid()]}). --spec(add_binding/5 :: (name(), rabbit_amqqueue:name(), rabbit_router:routing_key(), - rabbit_framing:amqp_table(), inner_fun()) -> bind_res()). --spec(delete_binding/5 :: (name(), rabbit_amqqueue:name(), rabbit_router:routing_key(), - rabbit_framing:amqp_table(), inner_fun()) -> - bind_res() | {'error', 'binding_not_found'}). --spec(list_bindings/1 :: (rabbit:vhost()) -> - [{name(), rabbit_amqqueue:name(), rabbit_router:routing_key(), rabbit_framing:amqp_table()}]). --spec(delete_queue_bindings/1 :: (rabbit_amqqueue:name()) -> fun (() -> none())). +-spec(info_all/1 :: (rabbit_framing:vhost()) -> [[rabbit:info()]]). +-spec(info_all/2 :: (rabbit_framing:vhost(), [rabbit:info_key()]) + -> [[rabbit:info()]]). +-spec(publish/2 :: (exchange(), rabbit:delivery()) + -> {rabbit_router:routing_result(), [pid()]}). +-spec(add_binding/5 :: + (name(), rabbit_amqqueue:name(), rabbit_router:routing_key(), + rabbit_framing:amqp_table(), inner_fun()) -> bind_res()). +-spec(delete_binding/5 :: + (name(), rabbit_amqqueue:name(), rabbit_router:routing_key(), + rabbit_framing:amqp_table(), inner_fun()) + -> bind_res() | {'error', 'binding_not_found'}). +-spec(list_bindings/1 :: (rabbit_framing:vhost()) -> + [{name(), rabbit_amqqueue:name(), + rabbit_router:routing_key(), rabbit_framing:amqp_table()}]). +-spec(delete_queue_bindings/1 :: + (rabbit_amqqueue:name()) -> fun (() -> none())). -spec(delete_transient_queue_bindings/1 :: (rabbit_amqqueue:name()) -> fun (() -> none())). -spec(delete/2 :: (name(), boolean()) -> 'ok' | rabbit:not_found() | {'error', 'in_use'}). --spec(list_queue_bindings/1 :: (rabbit_amqqueue:name()) -> - [{name(), rabbit_router:routing_key(), rabbit_framing:amqp_table()}]). --spec(list_exchange_bindings/1 :: (name()) -> - [{rabbit_amqqueue:name(), rabbit_router:routing_key(), rabbit_framing:amqp_table()}]). +-spec(list_queue_bindings/1 :: + (rabbit_amqqueue:name()) + -> [{name(), rabbit_router:routing_key(), rabbit_framing:amqp_table()}]). +-spec(list_exchange_bindings/1 :: + (name()) -> [{rabbit_amqqueue:name(), rabbit_router:routing_key(), + rabbit_framing:amqp_table()}]). -endif. diff --git a/src/rabbit_misc.erl b/src/rabbit_misc.erl index ee83e237..cd6dbdd9 100644 --- a/src/rabbit_misc.erl +++ b/src/rabbit_misc.erl @@ -63,6 +63,8 @@ -export([version_compare/2, version_compare/3]). -export([recursive_delete/1, dict_cons/3, unlink_and_capture_exit/1]). +-export_type([not_found/0, r/1]). + -import(mnesia). -import(lists). -import(cover). @@ -79,16 +81,17 @@ method :: atom()}). -type(not_found() :: {'error', 'not_found'}). -type(r(Kind) :: - #resource{virtual_host :: rabbit:vhost(), + #resource{virtual_host :: rabbit_framing:vhost(), kind :: Kind, - name :: rabbit:resource_name()}). + name :: rabbit_framing:resource_name()}). -spec(method_record_type/1 :: (tuple()) -> atom()). -spec(polite_pause/0 :: () -> 'done'). -spec(polite_pause/1 :: (non_neg_integer()) -> 'done'). -spec(die/1 :: (atom()) -> no_return()). -spec(frame_error/2 :: (atom(), binary()) -> no_return()). --spec(amqp_error/4 :: (atom(), string(), [any()], atom()) -> rabbit_misc:amqp_error()). +-spec(amqp_error/4 :: + (atom(), string(), [any()], atom()) -> rabbit_misc:amqp_error()). -spec(protocol_error/3 :: (atom(), string(), [any()]) -> no_return()). -spec(protocol_error/4 :: (atom(), string(), [any()], atom()) -> no_return()). -spec(not_found/1 :: (r(atom())) -> no_return()). @@ -96,15 +99,18 @@ -spec(get_config/2 :: (atom(), A) -> A). -spec(set_config/2 :: (atom(), any()) -> 'ok'). -spec(dirty_read/1 :: ({atom(), any()}) -> {'ok', any()} | not_found()). --spec(r/3 :: (rabbit:vhost() | rabbit:r(atom()), K, rabbit:resource_name()) -> - rabbit:r(K) when is_subtype(K, atom())). --spec(r/2 :: (rabbit:vhost(), K) -> #resource{virtual_host :: rabbit:vhost(), +-spec(r/3 :: (rabbit_framing:vhost() | r(atom()), K, + rabbit_framing:resource_name()) -> + r(K) when is_subtype(K, atom())). +-spec(r/2 :: (rabbit_framing:vhost(), K) + -> #resource{virtual_host :: rabbit_framing:vhost(), kind :: K, name :: '_'} when is_subtype(K, atom())). --spec(r_arg/4 :: (rabbit:vhost() | rabbit:r(atom()), K, rabbit_framing:amqp_table(), binary()) -> - undefined | rabbit:r(K) when is_subtype(K, atom())). --spec(rs/1 :: (rabbit:r(atom())) -> string()). +-spec(r_arg/4 :: (rabbit_framing:vhost() | r(atom()), K, + rabbit_framing:amqp_table(), binary()) + -> undefined | r(K) when is_subtype(K, atom())). +-spec(rs/1 :: (r(atom())) -> string()). -spec(enable_cover/0 :: () -> ok_or_error()). -spec(start_cover/1 :: ([{string(), string()} | string()]) -> 'ok'). -spec(report_cover/0 :: () -> 'ok'). @@ -115,9 +121,9 @@ -spec(with_exit_handler/2 :: (rabbit:thunk(A), rabbit:thunk(A)) -> A). -spec(filter_exit_map/2 :: (fun ((A) -> B), [A]) -> [B]). -spec(with_user/2 :: (rabbit_access_control:username(), rabbit:thunk(A)) -> A). --spec(with_vhost/2 :: (rabbit:vhost(), rabbit:thunk(A)) -> A). +-spec(with_vhost/2 :: (rabbit_framing:vhost(), rabbit:thunk(A)) -> A). -spec(with_user_and_vhost/3 :: (rabbit_access_control:username(), - rabbit:vhost(), rabbit:thunk(A)) -> A). + rabbit_framing:vhost(), rabbit:thunk(A)) -> A). -spec(execute_mnesia_transaction/1 :: (rabbit:thunk(A)) -> A). -spec(ensure_ok/2 :: (ok_or_error(), atom()) -> 'ok'). -spec(makenode/1 :: ({string(), string()} | string()) -> rabbit:erlang_node()). diff --git a/src/rabbit_networking.erl b/src/rabbit_networking.erl index ed396647..25ca5914 100644 --- a/src/rabbit_networking.erl +++ b/src/rabbit_networking.erl @@ -73,7 +73,8 @@ -spec(start/0 :: () -> 'ok'). -spec(start_tcp_listener/2 :: (inet:hostname(), inet:ip_port()) -> 'ok'). --spec(start_ssl_listener/3 :: (inet:hostname(), inet:ip_port(), [rabbit:info()]) -> 'ok'). +-spec(start_ssl_listener/3 :: (inet:hostname(), inet:ip_port(), [rabbit:info()]) + -> 'ok'). -spec(stop_tcp_listener/2 :: (inet:hostname(), inet:ip_port()) -> 'ok'). -spec(active_listeners/0 :: () -> [listener()]). -spec(node_listeners/1 :: (rabbit:erlang_node()) -> [listener()]). diff --git a/src/rabbit_router.erl b/src/rabbit_router.erl index 8144d4a9..86ce4128 100644 --- a/src/rabbit_router.erl +++ b/src/rabbit_router.erl @@ -36,6 +36,7 @@ -export([deliver/2, match_bindings/2, match_routing_key/2]). +-export_type([routing_key/0, routing_result/0]). %%---------------------------------------------------------------------------- -- cgit v1.2.1 From a7fe204b13b1f46d53d25ce87215b04ffdb50129 Mon Sep 17 00:00:00 2001 From: Alexandru Scvortov Date: Fri, 2 Jul 2010 11:55:40 +0100 Subject: fixed compile errors --- Makefile | 9 +++------ src/rabbit.erl | 2 -- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index 5935f034..962aa347 100644 --- a/Makefile +++ b/Makefile @@ -11,10 +11,10 @@ SOURCE_DIR=src EBIN_DIR=ebin INCLUDE_DIR=include DOCS_DIR=docs -INCLUDES=$(wildcard $(INCLUDE_DIR)/*.hrl) $(INCLUDE_DIR)/rabbit_framing.hrl $(INCLUDE_DIR)/rabbit_framing_spec.hrl +INCLUDES=$(wildcard $(INCLUDE_DIR)/*.hrl) $(INCLUDE_DIR)/rabbit_framing.hrl SOURCES=$(wildcard $(SOURCE_DIR)/*.erl) $(SOURCE_DIR)/rabbit_framing.erl $(USAGES_ERL) BEAM_TARGETS=$(patsubst $(SOURCE_DIR)/%.erl, $(EBIN_DIR)/%.beam, $(SOURCES)) -TARGETS=$(EBIN_DIR)/rabbit.app $(INCLUDE_DIR)/rabbit_framing.hrl $(INCLUDE_DIR)/rabbit_framing_spec.hrl $(BEAM_TARGETS) +TARGETS=$(EBIN_DIR)/rabbit.app $(INCLUDE_DIR)/rabbit_framing.hrl $(BEAM_TARGETS) WEB_URL=http://stage.rabbitmq.com/ MANPAGES=$(patsubst %.xml, %.gz, $(wildcard $(DOCS_DIR)/*.[0-9].xml)) WEB_MANPAGES=$(patsubst %.xml, %.man.xml, $(wildcard $(DOCS_DIR)/*.[0-9].xml) $(DOCS_DIR)/rabbitmq-service.xml) @@ -102,9 +102,6 @@ $(EBIN_DIR)/%.beam: $(INCLUDE_DIR)/rabbit_framing.hrl: codegen.py $(AMQP_CODEGEN_DIR)/amqp_codegen.py $(AMQP_SPEC_JSON_FILES) $(PYTHON) codegen.py header $(AMQP_SPEC_JSON_FILES) $@ -$(INCLUDE_DIR)/rabbit_framing_spec.hrl: codegen.py $(AMQP_CODEGEN_DIR)/amqp_codegen.py $(AMQP_SPEC_JSON_FILES) - $(PYTHON) codegen.py spec $(AMQP_SPEC_JSON_FILES) $@ - $(SOURCE_DIR)/rabbit_framing.erl: codegen.py $(AMQP_CODEGEN_DIR)/amqp_codegen.py $(AMQP_SPEC_JSON_FILES) $(PYTHON) codegen.py body $(AMQP_SPEC_JSON_FILES) $@ @@ -131,7 +128,7 @@ $(BASIC_PLT): $(BEAM_TARGETS) clean: rm -f $(EBIN_DIR)/*.beam rm -f $(EBIN_DIR)/rabbit.app $(EBIN_DIR)/rabbit.boot $(EBIN_DIR)/rabbit.script $(EBIN_DIR)/rabbit.rel - rm -f $(INCLUDE_DIR)/rabbit_framing.hrl $(INCLUDE_DIR)/rabbit_framing_spec.hrl $(SOURCE_DIR)/rabbit_framing.erl codegen.pyc + rm -f $(INCLUDE_DIR)/rabbit_framing.hrl $(SOURCE_DIR)/rabbit_framing.erl codegen.pyc rm -f $(DOCS_DIR)/*.[0-9].gz $(DOCS_DIR)/*.man.xml $(DOCS_DIR)/*.erl $(USAGES_ERL) rm -f $(RABBIT_PLT) rm -f $(DEPS_FILE) diff --git a/src/rabbit.erl b/src/rabbit.erl index ee295c3b..86e00b7f 100644 --- a/src/rabbit.erl +++ b/src/rabbit.erl @@ -188,8 +188,6 @@ -ifdef(use_specs). --include("rabbit_framing_spec.hrl"). - -type(maybe(T) :: T | 'none'). -type(erlang_node() :: atom()). -type(thunk(T) :: fun(() -> T)). -- cgit v1.2.1 From d81c817d65ceba84c8095b0df866e068779c92f2 Mon Sep 17 00:00:00 2001 From: Alexandru Scvortov Date: Fri, 2 Jul 2010 12:25:30 +0100 Subject: moved most hard-coded types from rabbit_framing --- codegen.py | 8 +------- src/rabbit.erl | 4 +++- src/rabbit_access_control.erl | 22 ++++++++++------------ src/rabbit_amqqueue.erl | 21 ++++++++++----------- src/rabbit_basic.erl | 13 ++++++------- src/rabbit_channel.erl | 5 ++--- src/rabbit_exchange.erl | 8 ++++---- src/rabbit_misc.erl | 18 +++++++++--------- 8 files changed, 45 insertions(+), 54 deletions(-) diff --git a/codegen.py b/codegen.py index 5c235e35..d0008cf3 100644 --- a/codegen.py +++ b/codegen.py @@ -333,8 +333,7 @@ def genErl(spec): -export([amqp_exception/1]). -export_type([amqp_table/0, amqp_property_type/0, amqp_method_record/0, - amqp_method_name/0, amqp_method/0, vhost/0, ctag/0, - resource_name/0, amqp_properties/0, amqp_class_id/0]). + amqp_method_name/0, amqp_method/0, amqp_class_id/0]). bitvalue(true) -> 1; bitvalue(false) -> 0; @@ -367,12 +366,7 @@ bitvalue(undefined) -> 0. %% we could make this more precise but ultimately are limited by %% dialyzer's lack of support for recursive types -type(amqp_table() :: [{binary(), amqp_field_type(), any()}]). -%% TODO: make this more precise -type(amqp_properties() :: tuple()). --type(resource_name() :: binary()). --type(vhost() :: binary()). --type(ctag() :: binary()). - -endif. % use_specs """ print "-ifdef(use_specs)." diff --git a/src/rabbit.erl b/src/rabbit.erl index 86e00b7f..e276cd03 100644 --- a/src/rabbit.erl +++ b/src/rabbit.erl @@ -42,7 +42,7 @@ -export_type([regexp/0, txn/0, thunk/1,maybe/1, info/0, info_key/0, msg_id/0, erlang_node/0, message/0, basic_message/0, delivery/0, content/0, decoded_content/0, encoded_content/0, - unencoded_content/0]). + unencoded_content/0, vhost/0, ctag/0]). %%--------------------------------------------------------------------------- %% Boot steps. @@ -192,6 +192,8 @@ -type(erlang_node() :: atom()). -type(thunk(T) :: fun(() -> T)). -type(regexp() :: binary()). +-type(vhost() :: binary()). +-type(ctag() :: binary()). %% TODO: make this more precise by tying specific class_ids to %% specific properties diff --git a/src/rabbit_access_control.erl b/src/rabbit_access_control.erl index 08f00ab2..082b0ac2 100644 --- a/src/rabbit_access_control.erl +++ b/src/rabbit_access_control.erl @@ -55,26 +55,24 @@ -spec(check_login/2 :: (binary(), binary()) -> user()). -spec(user_pass_login/2 :: (username(), password()) -> user()). --spec(check_vhost_access/2 :: (user(), rabbit_framing:vhost()) -> 'ok'). +-spec(check_vhost_access/2 :: (user(), rabbit:vhost()) -> 'ok'). -spec(check_resource_access/3 :: - (username(), rabbit_misc:r(atom()), permission_atom()) -> 'ok'). + (username(), rabbit_misc:r(atom()), permission_atom()) -> 'ok'). -spec(add_user/2 :: (username(), password()) -> 'ok'). -spec(delete_user/1 :: (username()) -> 'ok'). -spec(change_password/2 :: (username(), password()) -> 'ok'). -spec(list_users/0 :: () -> [username()]). -spec(lookup_user/1 :: (username()) -> {'ok', user()} | rabbit_misc:not_found()). --spec(add_vhost/1 :: (rabbit_framing:vhost()) -> 'ok'). --spec(delete_vhost/1 :: (rabbit_framing:vhost()) -> 'ok'). --spec(list_vhosts/0 :: () -> [rabbit_framing:vhost()]). --spec(set_permissions/5 :: - (username(), rabbit_framing:vhost(), rabbit:regexp(), - rabbit:regexp(), rabbit:regexp() - ) -> 'ok'). --spec(clear_permissions/2 :: (username(), rabbit_framing:vhost()) -> 'ok'). +-spec(add_vhost/1 :: (rabbit:vhost()) -> 'ok'). +-spec(delete_vhost/1 :: (rabbit:vhost()) -> 'ok'). +-spec(list_vhosts/0 :: () -> [rabbit:vhost()]). +-spec(set_permissions/5 ::(username(), rabbit:vhost(), rabbit:regexp(), + rabbit:regexp(), rabbit:regexp()) -> 'ok'). +-spec(clear_permissions/2 :: (username(), rabbit:vhost()) -> 'ok'). -spec(list_vhost_permissions/1 :: - (rabbit_framing:vhost()) -> [{username(), rabbit:regexp(), - rabbit:regexp(), rabbit:regexp()}]). + (rabbit:vhost()) -> [{username(), rabbit:regexp(), + rabbit:regexp(), rabbit:regexp()}]). -spec(list_user_permissions/1 :: (username()) -> [{rabbit_framing:vhost(), rabbit:regexp(), rabbit:regexp(), rabbit:regexp()}]). diff --git a/src/rabbit_amqqueue.erl b/src/rabbit_amqqueue.erl index af8e1a0d..c65913cf 100644 --- a/src/rabbit_amqqueue.erl +++ b/src/rabbit_amqqueue.erl @@ -80,17 +80,16 @@ -spec(lookup/1 :: (name()) -> {'ok', amqqueue()} | rabbit_misc:not_found()). -spec(with/2 :: (name(), qfun(A)) -> A | rabbit_misc:not_found()). -spec(with_or_die/2 :: (name(), qfun(A)) -> A). --spec(list/1 :: (rabbit_framing:vhost()) -> [amqqueue()]). +-spec(list/1 :: (rabbit:vhost()) -> [amqqueue()]). -spec(info_keys/0 :: () -> [rabbit:info_key()]). -spec(info/1 :: (amqqueue()) -> [rabbit:info()]). -spec(info/2 :: (amqqueue(), [rabbit:info_key()]) -> [rabbit:info()]). --spec(info_all/1 :: (rabbit_framing:vhost()) -> [[rabbit:info()]]). --spec(info_all/2 :: (rabbit_framing:vhost(), [rabbit:info_key()]) +-spec(info_all/1 :: (rabbit:vhost()) -> [[rabbit:info()]]). +-spec(info_all/2 :: (rabbit:vhost(), [rabbit:info_key()]) -> [[rabbit:info()]]). --spec(consumers/1 :: - (amqqueue()) -> [{pid(), rabbit_framing:ctag(), boolean()}]). --spec(consumers_all/1 :: (rabbit_framing:vhost()) - -> [{name(), pid(), rabbit_framing:ctag(), boolean()}]). +-spec(consumers/1 :: (amqqueue()) -> [{pid(), rabbit:ctag(), boolean()}]). +-spec(consumers_all/1 :: (rabbit:vhost()) + -> [{name(), pid(), rabbit:ctag(), boolean()}]). -spec(stat/1 :: (amqqueue()) -> qstats()). -spec(stat_all/0 :: () -> [qstats()]). -spec(delete/3 :: @@ -112,10 +111,10 @@ -spec(basic_get/3 :: (amqqueue(), pid(), boolean()) -> {'ok', non_neg_integer(), qmsg()} | 'empty'). -spec(basic_consume/7 :: - (amqqueue(), boolean(), pid(), pid() | 'undefined', rabbit_framing:ctag(), - boolean(), any()) -> - 'ok' | {'error', 'exclusive_consume_unavailable'}). --spec(basic_cancel/4 :: (amqqueue(), pid(), rabbit_framing:ctag(), any()) -> 'ok'). + (amqqueue(), boolean(), pid(), pid() | 'undefined', + rabbit:ctag(), boolean(), any()) + -> 'ok' | {'error', 'exclusive_consume_unavailable'}). +-spec(basic_cancel/4 :: (amqqueue(), pid(), rabbit:ctag(), any()) -> 'ok'). -spec(notify_sent/2 :: (pid(), pid()) -> 'ok'). -spec(unblock/2 :: (pid(), pid()) -> 'ok'). -spec(flush_all/2 :: ([pid()], pid()) -> 'ok'). diff --git a/src/rabbit_basic.erl b/src/rabbit_basic.erl index 8979b83b..e2c861d6 100644 --- a/src/rabbit_basic.erl +++ b/src/rabbit_basic.erl @@ -42,8 +42,7 @@ -ifdef(use_specs). --type(properties_input() :: - (rabbit_framing:amqp_properties() | [{atom(), any()}])). +-type(properties_input() :: (rabbit_framing:amqp_properties() | [{atom(), any()}])). -type(publish_result() :: ({ok, rabbit_router:routing_result(), [pid()]} | rabbit_misc:not_found())). @@ -53,16 +52,16 @@ -spec(message/4 :: (rabbit_exchange:name(), rabbit_router:routing_key(), properties_input(), binary()) -> (rabbit:message() | {'error', any()})). --spec(properties/1 :: - (properties_input()) -> rabbit_framing:amqp_properties()). +-spec(properties/1 :: (properties_input()) -> rabbit_framing:amqp_properties()). -spec(publish/4 :: (rabbit_exchange:name(), rabbit_router:routing_key(), properties_input(), binary()) -> publish_result()). -spec(publish/7 :: (rabbit_exchange:name(), rabbit_router:routing_key(), boolean(), boolean(), rabbit:maybe(rabbit:txn()), properties_input(), binary()) -> publish_result()). --spec(build_content/2 :: (rabbit_framing:amqp_properties(), binary()) - -> rabbit:content()). --spec(from_content/1 :: (rabbit:content()) -> {rabbit_framing:amqp_properties(), binary()}). +-spec(build_content/2 :: + (rabbit_framing:amqp_properties(), binary()) -> rabbit:content()). +-spec(from_content/1 :: (rabbit:content()) + -> {rabbit_framing:amqp_properties(), binary()}). -spec(is_message_persistent/1 :: (rabbit:decoded_content()) -> (boolean() | {'invalid', non_neg_integer()})). diff --git a/src/rabbit_channel.erl b/src/rabbit_channel.erl index 080c4c99..ca2e428e 100644 --- a/src/rabbit_channel.erl +++ b/src/rabbit_channel.erl @@ -78,14 +78,13 @@ -spec(start_link/6 :: (channel_number(), pid(), pid(), rabbit_access_control:username(), - rabbit_framing:vhost(), pid()) -> pid()). + rabbit:vhost(), pid()) -> pid()). -spec(do/2 :: (pid(), rabbit_framing:amqp_method_record()) -> 'ok'). -spec(do/3 :: (pid(), rabbit_framing:amqp_method_record(), rabbit:maybe(rabbit:content())) -> 'ok'). -spec(shutdown/1 :: (pid()) -> 'ok'). -spec(send_command/2 :: (pid(), rabbit_framing:amqp_method()) -> 'ok'). --spec(deliver/4 :: - (pid(), rabbit_framing:ctag(), boolean(), rabbit_queue:qmsg()) -> 'ok'). +-spec(deliver/4 ::(pid(), rabbit:ctag(), boolean(), rabbit_queue:qmsg()) -> 'ok'). -spec(conserve_memory/2 :: (pid(), boolean()) -> 'ok'). -spec(flushed/2 :: (pid(), pid()) -> 'ok'). -spec(flow_timeout/2 :: (pid(), ref()) -> 'ok'). diff --git a/src/rabbit_exchange.erl b/src/rabbit_exchange.erl index e109158b..4db5a933 100644 --- a/src/rabbit_exchange.erl +++ b/src/rabbit_exchange.erl @@ -90,12 +90,12 @@ -spec(lookup/1 :: (name()) -> {'ok', exchange()} | rabbit_misc:not_found()). -spec(lookup_or_die/1 :: (name()) -> exchange()). --spec(list/1 :: (rabbit_framing:vhost()) -> [exchange()]). +-spec(list/1 :: (rabbit:vhost()) -> [exchange()]). -spec(info_keys/0 :: () -> [rabbit:info_key()]). -spec(info/1 :: (exchange()) -> [rabbit:info()]). -spec(info/2 :: (exchange(), [rabbit:info_key()]) -> [rabbit:info()]). --spec(info_all/1 :: (rabbit_framing:vhost()) -> [[rabbit:info()]]). --spec(info_all/2 :: (rabbit_framing:vhost(), [rabbit:info_key()]) +-spec(info_all/1 :: (rabbit:vhost()) -> [[rabbit:info()]]). +-spec(info_all/2 :: (rabbit:vhost(), [rabbit:info_key()]) -> [[rabbit:info()]]). -spec(publish/2 :: (exchange(), rabbit:delivery()) -> {rabbit_router:routing_result(), [pid()]}). @@ -106,7 +106,7 @@ (name(), rabbit_amqqueue:name(), rabbit_router:routing_key(), rabbit_framing:amqp_table(), inner_fun()) -> bind_res() | {'error', 'binding_not_found'}). --spec(list_bindings/1 :: (rabbit_framing:vhost()) -> +-spec(list_bindings/1 :: (rabbit:vhost()) -> [{name(), rabbit_amqqueue:name(), rabbit_router:routing_key(), rabbit_framing:amqp_table()}]). -spec(delete_queue_bindings/1 :: diff --git a/src/rabbit_misc.erl b/src/rabbit_misc.erl index cd6dbdd9..33c7d82e 100644 --- a/src/rabbit_misc.erl +++ b/src/rabbit_misc.erl @@ -80,10 +80,11 @@ explanation :: string(), method :: atom()}). -type(not_found() :: {'error', 'not_found'}). +-type(resource_name() :: binary()). -type(r(Kind) :: #resource{virtual_host :: rabbit_framing:vhost(), kind :: Kind, - name :: rabbit_framing:resource_name()}). + name :: resource_name()}). -spec(method_record_type/1 :: (tuple()) -> atom()). -spec(polite_pause/0 :: () -> 'done'). @@ -99,15 +100,14 @@ -spec(get_config/2 :: (atom(), A) -> A). -spec(set_config/2 :: (atom(), any()) -> 'ok'). -spec(dirty_read/1 :: ({atom(), any()}) -> {'ok', any()} | not_found()). --spec(r/3 :: (rabbit_framing:vhost() | r(atom()), K, - rabbit_framing:resource_name()) -> - r(K) when is_subtype(K, atom())). --spec(r/2 :: (rabbit_framing:vhost(), K) - -> #resource{virtual_host :: rabbit_framing:vhost(), +-spec(r/3 :: (rabbit:vhost() | r(atom()), K, resource_name()) + -> r(K) when is_subtype(K, atom())). +-spec(r/2 :: (rabbit:vhost(), K) + -> #resource{virtual_host :: rabbit:vhost(), kind :: K, name :: '_'} when is_subtype(K, atom())). --spec(r_arg/4 :: (rabbit_framing:vhost() | r(atom()), K, +-spec(r_arg/4 :: (rabbit:vhost() | r(atom()), K, rabbit_framing:amqp_table(), binary()) -> undefined | r(K) when is_subtype(K, atom())). -spec(rs/1 :: (r(atom())) -> string()). @@ -121,9 +121,9 @@ -spec(with_exit_handler/2 :: (rabbit:thunk(A), rabbit:thunk(A)) -> A). -spec(filter_exit_map/2 :: (fun ((A) -> B), [A]) -> [B]). -spec(with_user/2 :: (rabbit_access_control:username(), rabbit:thunk(A)) -> A). --spec(with_vhost/2 :: (rabbit_framing:vhost(), rabbit:thunk(A)) -> A). +-spec(with_vhost/2 :: (rabbit:vhost(), rabbit:thunk(A)) -> A). -spec(with_user_and_vhost/3 :: (rabbit_access_control:username(), - rabbit_framing:vhost(), rabbit:thunk(A)) -> A). + rabbit:vhost(), rabbit:thunk(A)) -> A). -spec(execute_mnesia_transaction/1 :: (rabbit:thunk(A)) -> A). -spec(ensure_ok/2 :: (ok_or_error(), atom()) -> 'ok'). -spec(makenode/1 :: ({string(), string()} | string()) -> rabbit:erlang_node()). -- cgit v1.2.1 From 334d32e77e309e1e49d2f0710ff98208a4bb5c08 Mon Sep 17 00:00:00 2001 From: Alexandru Scvortov Date: Fri, 2 Jul 2010 15:01:15 +0100 Subject: better types --- codegen.py | 26 +++++++++++++++++++------- src/rabbit.erl | 10 +++++----- src/rabbit_access_control.erl | 2 +- src/rabbit_amqqueue.erl | 2 ++ src/rabbit_basic.erl | 8 ++++---- src/rabbit_binary_generator.erl | 2 +- src/rabbit_channel.erl | 2 +- src/rabbit_exchange.erl | 2 +- src/rabbit_misc.erl | 4 ++-- src/rabbit_net.erl | 2 ++ 10 files changed, 38 insertions(+), 22 deletions(-) diff --git a/codegen.py b/codegen.py index d0008cf3..81cbc506 100644 --- a/codegen.py +++ b/codegen.py @@ -333,7 +333,8 @@ def genErl(spec): -export([amqp_exception/1]). -export_type([amqp_table/0, amqp_property_type/0, amqp_method_record/0, - amqp_method_name/0, amqp_method/0, amqp_class_id/0]). + amqp_method_name/0, amqp_method/0, amqp_class_id/0, + amqp_value/0, amqp_array/0]). bitvalue(true) -> 1; bitvalue(false) -> 0; @@ -353,9 +354,7 @@ bitvalue(undefined) -> 0. -spec(encode_properties/1 :: (amqp_method_record()) -> binary()). -spec(lookup_amqp_exception/1 :: (amqp_exception()) -> {boolean(), amqp_exception_code(), binary()}). -spec(amqp_exception/1 :: (amqp_exception_code()) -> amqp_exception()). --endif. % use_specs --ifdef(use_specs). -type(amqp_field_type() :: 'longstr' | 'signedint' | 'decimal' | 'timestamp' | 'table' | 'byte' | 'double' | 'float' | 'long' | @@ -363,10 +362,23 @@ bitvalue(undefined) -> 0. -type(amqp_property_type() :: 'shortstr' | 'longstr' | 'octet' | 'shortint' | 'longint' | 'longlongint' | 'timestamp' | 'bit' | 'table'). -%% we could make this more precise but ultimately are limited by -%% dialyzer's lack of support for recursive types --type(amqp_table() :: [{binary(), amqp_field_type(), any()}]). --type(amqp_properties() :: tuple()). + +-type(amqp_table() :: [{binary(), amqp_field_type(), amqp_value()}]). +-type(amqp_array() :: [{amqp_field_type(), amqp_value()}]). +-type(amqp_value() :: binary() | % longstr + integer() | % signedint + {non_neg_integer(), non_neg_integer()} | % decimal + amqp_table() | + amqp_array() | + byte() | % byte + float() | % double + integer() | % long + integer() | % short + boolean() | % bool + binary() | % binary + 'undefined' | % void + non_neg_integer() % timestamp + ). -endif. % use_specs """ print "-ifdef(use_specs)." diff --git a/src/rabbit.erl b/src/rabbit.erl index e276cd03..a0f0c7f2 100644 --- a/src/rabbit.erl +++ b/src/rabbit.erl @@ -41,8 +41,8 @@ -export_type([regexp/0, txn/0, thunk/1,maybe/1, info/0, info_key/0, msg_id/0, erlang_node/0, message/0, basic_message/0, - delivery/0, content/0, decoded_content/0, encoded_content/0, - unencoded_content/0, vhost/0, ctag/0]). + delivery/0, content/0, decoded_content/0, undecoded_content/0, + unencoded_content/0, encoded_content/0, vhost/0, ctag/0]). %%--------------------------------------------------------------------------- %% Boot steps. @@ -203,18 +203,18 @@ properties_bin :: binary(), payload_fragments_rev :: [binary()]} | #content{class_id :: rabbit_framing:amqp_class_id(), - properties :: rabbit_framing:amqp_properties(), + properties :: rabbit_framing:amqp_property_record(), properties_bin :: 'none', payload_fragments_rev :: [binary()]}). -type(unencoded_content() :: undecoded_content()). -type(decoded_content() :: #content{class_id :: rabbit_framing:amqp_class_id(), - properties :: rabbit_framing:amqp_properties(), + properties :: rabbit_framing:amqp_property_record(), properties_bin :: rabbit:maybe(binary()), payload_fragments_rev :: [binary()]}). -type(encoded_content() :: #content{class_id :: rabbit_framing:amqp_class_id(), - properties :: rabbit:maybe(rabbit_framing:amqp_properties()), + properties :: rabbit:maybe(rabbit_framing:amqp_property_record()), properties_bin :: binary(), payload_fragments_rev :: [binary()]}). -type(content() :: undecoded_content() | decoded_content()). diff --git a/src/rabbit_access_control.erl b/src/rabbit_access_control.erl index 082b0ac2..fec09217 100644 --- a/src/rabbit_access_control.erl +++ b/src/rabbit_access_control.erl @@ -74,7 +74,7 @@ (rabbit:vhost()) -> [{username(), rabbit:regexp(), rabbit:regexp(), rabbit:regexp()}]). -spec(list_user_permissions/1 :: - (username()) -> [{rabbit_framing:vhost(), rabbit:regexp(), + (username()) -> [{rabbit:vhost(), rabbit:regexp(), rabbit:regexp(), rabbit:regexp()}]). -endif. diff --git a/src/rabbit_amqqueue.erl b/src/rabbit_amqqueue.erl index c65913cf..96c7058d 100644 --- a/src/rabbit_amqqueue.erl +++ b/src/rabbit_amqqueue.erl @@ -46,6 +46,8 @@ -export([commit_all/3, rollback_all/3, notify_down_all/2, limit_all/3]). -export([on_node_down/1]). +-export_type([amqqueue/0, name/0, qmsg/0]). + -import(mnesia). -import(gen_server2). -import(lists). diff --git a/src/rabbit_basic.erl b/src/rabbit_basic.erl index e2c861d6..fb6f85dd 100644 --- a/src/rabbit_basic.erl +++ b/src/rabbit_basic.erl @@ -42,7 +42,7 @@ -ifdef(use_specs). --type(properties_input() :: (rabbit_framing:amqp_properties() | [{atom(), any()}])). +-type(properties_input() :: (rabbit_framing:amqp_property_record() | [{atom(), any()}])). -type(publish_result() :: ({ok, rabbit_router:routing_result(), [pid()]} | rabbit_misc:not_found())). @@ -52,16 +52,16 @@ -spec(message/4 :: (rabbit_exchange:name(), rabbit_router:routing_key(), properties_input(), binary()) -> (rabbit:message() | {'error', any()})). --spec(properties/1 :: (properties_input()) -> rabbit_framing:amqp_properties()). +-spec(properties/1 :: (properties_input()) -> rabbit_framing:amqp_property_record()). -spec(publish/4 :: (rabbit_exchange:name(), rabbit_router:routing_key(), properties_input(), binary()) -> publish_result()). -spec(publish/7 :: (rabbit_exchange:name(), rabbit_router:routing_key(), boolean(), boolean(), rabbit:maybe(rabbit:txn()), properties_input(), binary()) -> publish_result()). -spec(build_content/2 :: - (rabbit_framing:amqp_properties(), binary()) -> rabbit:content()). + (rabbit_framing:amqp_property_record(), binary()) -> rabbit:content()). -spec(from_content/1 :: (rabbit:content()) - -> {rabbit_framing:amqp_properties(), binary()}). + -> {rabbit_framing:amqp_property_record(), binary()}). -spec(is_message_persistent/1 :: (rabbit:decoded_content()) -> (boolean() | {'invalid', non_neg_integer()})). diff --git a/src/rabbit_binary_generator.erl b/src/rabbit_binary_generator.erl index 655dfe5c..a2af46c9 100644 --- a/src/rabbit_binary_generator.erl +++ b/src/rabbit_binary_generator.erl @@ -63,7 +63,7 @@ (rabbit_channel:channel_number(), rabbit:content(), non_neg_integer()) -> [frame()]). -spec(build_heartbeat_frame/0 :: () -> frame()). --spec(generate_table/1 :: (rabbit:amqp_table()) -> binary()). +-spec(generate_table/1 :: (rabbit_framing:amqp_table()) -> binary()). -spec(encode_properties/2 :: ([rabbit_framing:amqp_property_type()], [any()]) -> binary()). -spec(check_empty_content_body_frame_size/0 :: () -> 'ok'). diff --git a/src/rabbit_channel.erl b/src/rabbit_channel.erl index ca2e428e..a446bbab 100644 --- a/src/rabbit_channel.erl +++ b/src/rabbit_channel.erl @@ -84,7 +84,7 @@ rabbit:maybe(rabbit:content())) -> 'ok'). -spec(shutdown/1 :: (pid()) -> 'ok'). -spec(send_command/2 :: (pid(), rabbit_framing:amqp_method()) -> 'ok'). --spec(deliver/4 ::(pid(), rabbit:ctag(), boolean(), rabbit_queue:qmsg()) -> 'ok'). +-spec(deliver/4 ::(pid(), rabbit:ctag(), boolean(), rabbit_amqqueue:qmsg()) -> 'ok'). -spec(conserve_memory/2 :: (pid(), boolean()) -> 'ok'). -spec(flushed/2 :: (pid(), pid()) -> 'ok'). -spec(flow_timeout/2 :: (pid(), ref()) -> 'ok'). diff --git a/src/rabbit_exchange.erl b/src/rabbit_exchange.erl index 4db5a933..0e5b9baf 100644 --- a/src/rabbit_exchange.erl +++ b/src/rabbit_exchange.erl @@ -114,7 +114,7 @@ -spec(delete_transient_queue_bindings/1 :: (rabbit_amqqueue:name()) -> fun (() -> none())). -spec(delete/2 :: (name(), boolean()) -> - 'ok' | rabbit:not_found() | {'error', 'in_use'}). + 'ok' | rabbit_misc:not_found() | {'error', 'in_use'}). -spec(list_queue_bindings/1 :: (rabbit_amqqueue:name()) -> [{name(), rabbit_router:routing_key(), rabbit_framing:amqp_table()}]). diff --git a/src/rabbit_misc.erl b/src/rabbit_misc.erl index 33c7d82e..986b1825 100644 --- a/src/rabbit_misc.erl +++ b/src/rabbit_misc.erl @@ -63,7 +63,7 @@ -export([version_compare/2, version_compare/3]). -export([recursive_delete/1, dict_cons/3, unlink_and_capture_exit/1]). --export_type([not_found/0, r/1]). +-export_type([not_found/0, amqp_error/0, r/1]). -import(mnesia). -import(lists). @@ -82,7 +82,7 @@ -type(not_found() :: {'error', 'not_found'}). -type(resource_name() :: binary()). -type(r(Kind) :: - #resource{virtual_host :: rabbit_framing:vhost(), + #resource{virtual_host :: rabbit:vhost(), kind :: Kind, name :: resource_name()}). diff --git a/src/rabbit_net.erl b/src/rabbit_net.erl index b04adc22..b098f37a 100644 --- a/src/rabbit_net.erl +++ b/src/rabbit_net.erl @@ -35,6 +35,8 @@ -export([async_recv/3, close/1, controlling_process/2, getstat/2, peername/1, port_command/2, send/2, sockname/1]). +-export_type([socket/0]). + %%--------------------------------------------------------------------------- -ifdef(use_specs). -- cgit v1.2.1 From 04664781690cc3b7451a60aa6066ba01781b6758 Mon Sep 17 00:00:00 2001 From: Alexandru Scvortov Date: Fri, 2 Jul 2010 15:14:30 +0100 Subject: because inet doesn't export all its types --- src/rabbit.erl | 4 +++- src/rabbit_misc.erl | 2 +- src/rabbit_net.erl | 6 +++--- src/rabbit_networking.erl | 12 ++++++------ 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/rabbit.erl b/src/rabbit.erl index a0f0c7f2..5c6bb08a 100644 --- a/src/rabbit.erl +++ b/src/rabbit.erl @@ -42,7 +42,8 @@ -export_type([regexp/0, txn/0, thunk/1,maybe/1, info/0, info_key/0, msg_id/0, erlang_node/0, message/0, basic_message/0, delivery/0, content/0, decoded_content/0, undecoded_content/0, - unencoded_content/0, encoded_content/0, vhost/0, ctag/0]). + unencoded_content/0, encoded_content/0, vhost/0, ctag/0, + ip_port/0, hostname/0]). %%--------------------------------------------------------------------------- %% Boot steps. @@ -181,6 +182,7 @@ -include("rabbit_framing.hrl"). -include("rabbit.hrl"). +-include_lib("kernel/include/inet.hrl"). -define(APPS, [os_mon, mnesia, rabbit]). diff --git a/src/rabbit_misc.erl b/src/rabbit_misc.erl index 986b1825..1e05c61c 100644 --- a/src/rabbit_misc.erl +++ b/src/rabbit_misc.erl @@ -129,7 +129,7 @@ -spec(makenode/1 :: ({string(), string()} | string()) -> rabbit:erlang_node()). -spec(nodeparts/1 :: (rabbit:erlang_node() | string()) -> {string(), string()}). -spec(cookie_hash/0 :: () -> string()). --spec(tcp_name/3 :: (atom(), inet:ip_address(), inet:ip_port()) -> atom()). +-spec(tcp_name/3 :: (atom(), inet:ip_address(), rabbit:ip_port()) -> atom()). -spec(intersperse/2 :: (A, [A]) -> [A]). -spec(upmap/2 :: (fun ((A) -> B), [A]) -> [B]). -spec(map_in_order/2 :: (fun ((A) -> B), [A]) -> [B]). diff --git a/src/rabbit_net.erl b/src/rabbit_net.erl index b098f37a..1232b457 100644 --- a/src/rabbit_net.erl +++ b/src/rabbit_net.erl @@ -46,7 +46,7 @@ 'send_cnt' | 'send_max' | 'send_avg' | 'send_oct' | 'send_pend'). -type(error() :: {'error', any()}). -type(ssl_socket() :: #ssl_socket{}). --type(socket() :: inet:ip_port() | ssl_socket()). +-type(socket() :: rabbit:ip_port() | ssl_socket()). -spec(async_recv/3 :: (socket(), integer(), timeout()) -> {'ok', any()}). -spec(close/1 :: (socket()) -> 'ok' | error()). @@ -54,9 +54,9 @@ -spec(port_command/2 :: (socket(), iolist()) -> 'true'). -spec(send/2 :: (socket(), binary() | iolist()) -> 'ok' | error()). -spec(peername/1 :: (socket()) -> - {'ok', {inet:ip_address(), inet:ip_port()}} | error()). + {'ok', {inet:ip_address(), rabbit:ip_port()}} | error()). -spec(sockname/1 :: (socket()) -> - {'ok', {inet:ip_address(), inet:ip_port()}} | error()). + {'ok', {inet:ip_address(), rabbit:ip_port()}} | error()). -spec(getstat/2 :: (socket(), [stat_option()]) -> {'ok', [{stat_option(), integer()}]} | error()). diff --git a/src/rabbit_networking.erl b/src/rabbit_networking.erl index 25ca5914..758741e8 100644 --- a/src/rabbit_networking.erl +++ b/src/rabbit_networking.erl @@ -68,14 +68,14 @@ -type(listener() :: #listener{node :: rabbit:erlang_node(), protocol :: atom(), - host :: inet:hostname(), - port :: inet:ip_port()}). + host :: rabbit:hostname(), + port :: rabbit:ip_port()}). -spec(start/0 :: () -> 'ok'). --spec(start_tcp_listener/2 :: (inet:hostname(), inet:ip_port()) -> 'ok'). --spec(start_ssl_listener/3 :: (inet:hostname(), inet:ip_port(), [rabbit:info()]) +-spec(start_tcp_listener/2 :: (rabbit:hostname(), rabbit:ip_port()) -> 'ok'). +-spec(start_ssl_listener/3 :: (rabbit:hostname(), rabbit:ip_port(), [rabbit:info()]) -> 'ok'). --spec(stop_tcp_listener/2 :: (inet:hostname(), inet:ip_port()) -> 'ok'). +-spec(stop_tcp_listener/2 :: (rabbit:hostname(), rabbit:ip_port()) -> 'ok'). -spec(active_listeners/0 :: () -> [listener()]). -spec(node_listeners/1 :: (rabbit:erlang_node()) -> [listener()]). -spec(connections/0 :: () -> [connection()]). @@ -86,7 +86,7 @@ -spec(connection_info_all/1 :: ([rabbit:info_key()]) -> [[rabbit:info()]]). -spec(close_connection/2 :: (pid(), string()) -> 'ok'). -spec(on_node_down/1 :: (rabbit:erlang_node()) -> 'ok'). --spec(check_tcp_listener_address/3 :: (atom(), inet:hostname(), inet:ip_port()) -> +-spec(check_tcp_listener_address/3 :: (atom(), rabbit:hostname(), rabbit:ip_port()) -> {inet:ip_address(), atom()}). -endif. -- cgit v1.2.1 From 249690cc56c0c4a4a028463182720247b41ffce2 Mon Sep 17 00:00:00 2001 From: Alexandru Scvortov Date: Fri, 2 Jul 2010 15:18:31 +0100 Subject: updated dict() to dict:dictionary() --- src/rabbit_invariable_queue.erl | 2 +- src/rabbit_misc.erl | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/rabbit_invariable_queue.erl b/src/rabbit_invariable_queue.erl index d3f89ab9..df8adb2e 100644 --- a/src/rabbit_invariable_queue.erl +++ b/src/rabbit_invariable_queue.erl @@ -52,7 +52,7 @@ -type(state() :: #iv_state { queue :: queue(), qname :: rabbit_amqqueue:name(), len :: non_neg_integer(), - pending_ack :: dict() + pending_ack :: dict:dictionary() }). -include("rabbit_backing_queue_spec.hrl"). diff --git a/src/rabbit_misc.erl b/src/rabbit_misc.erl index 1e05c61c..92ca6c0a 100644 --- a/src/rabbit_misc.erl +++ b/src/rabbit_misc.erl @@ -156,7 +156,7 @@ ('lt' | 'lte' | 'eq' | 'gte' | 'gt')) -> boolean()). -spec(recursive_delete/1 :: ([file:filename()]) -> 'ok' | {'error', {file:filename(), any()}}). --spec(dict_cons/3 :: (any(), any(), dict()) -> dict()). +-spec(dict_cons/3 :: (any(), any(), dict:dictionary()) -> dict:dictionary()). -spec(unlink_and_capture_exit/1 :: (pid()) -> 'ok'). -endif. -- cgit v1.2.1 From 561c46c8b6f5b26b4700cd1c2f4d2cd3697917d8 Mon Sep 17 00:00:00 2001 From: Alexandru Scvortov Date: Fri, 2 Jul 2010 15:41:11 +0100 Subject: better types --- src/rabbit.erl | 7 +++---- src/rabbit_amqqueue.erl | 2 +- src/rabbit_control.erl | 2 +- src/rabbit_load.erl | 5 ++--- src/rabbit_misc.erl | 6 +++--- src/rabbit_mnesia.erl | 6 +++--- src/rabbit_networking.erl | 6 +++--- 7 files changed, 16 insertions(+), 18 deletions(-) diff --git a/src/rabbit.erl b/src/rabbit.erl index 5c6bb08a..e6bc240e 100644 --- a/src/rabbit.erl +++ b/src/rabbit.erl @@ -40,7 +40,7 @@ -export([log_location/1]). -export_type([regexp/0, txn/0, thunk/1,maybe/1, info/0, info_key/0, - msg_id/0, erlang_node/0, message/0, basic_message/0, + msg_id/0, message/0, basic_message/0, delivery/0, content/0, decoded_content/0, undecoded_content/0, unencoded_content/0, encoded_content/0, vhost/0, ctag/0, ip_port/0, hostname/0]). @@ -191,7 +191,6 @@ -ifdef(use_specs). -type(maybe(T) :: T | 'none'). --type(erlang_node() :: atom()). -type(thunk(T) :: fun(() -> T)). -type(regexp() :: binary()). -type(vhost() :: binary()). @@ -251,8 +250,8 @@ -spec(rotate_logs/1 :: (file_suffix()) -> 'ok' | {'error', any()}). -spec(status/0 :: () -> [{running_applications, [{atom(), string(), string()}]} | - {nodes, [{rabbit_mnesia:node_type(), [erlang_node()]}]} | - {running_nodes, [erlang_node()]}]). + {nodes, [{rabbit_mnesia:node_type(), [node()]}]} | + {running_nodes, [node()]}]). -spec(log_location/1 :: ('sasl' | 'kernel') -> log_location()). -endif. diff --git a/src/rabbit_amqqueue.erl b/src/rabbit_amqqueue.erl index 96c7058d..7b9fcaac 100644 --- a/src/rabbit_amqqueue.erl +++ b/src/rabbit_amqqueue.erl @@ -126,7 +126,7 @@ -spec(update_ram_duration/1 :: (pid()) -> 'ok'). -spec(set_ram_duration_target/2 :: (pid(), number() | 'infinity') -> 'ok'). -spec(set_maximum_since_use/2 :: (pid(), non_neg_integer()) -> 'ok'). --spec(on_node_down/1 :: (rabbit:erlang_node()) -> 'ok'). +-spec(on_node_down/1 :: (node()) -> 'ok'). -spec(pseudo_queue/2 :: (binary(), pid()) -> amqqueue()). -endif. diff --git a/src/rabbit_control.erl b/src/rabbit_control.erl index 4aab0dce..95a49f86 100644 --- a/src/rabbit_control.erl +++ b/src/rabbit_control.erl @@ -44,7 +44,7 @@ -spec(start/0 :: () -> no_return()). -spec(stop/0 :: () -> 'ok'). --spec(action/4 :: (atom(), rabbit:erlang_node(), [string()], +-spec(action/4 :: (atom(), node(), [string()], fun ((string(), [any()]) -> 'ok')) -> 'ok'). -spec(usage/0 :: () -> no_return()). diff --git a/src/rabbit_load.erl b/src/rabbit_load.erl index 4f467162..e0457b1e 100644 --- a/src/rabbit_load.erl +++ b/src/rabbit_load.erl @@ -40,11 +40,10 @@ -ifdef(use_specs). --type(erlang_node() :: atom()). --type(load() :: {{non_neg_integer(), integer() | 'unknown'}, erlang_node()}). +-type(load() :: {{non_neg_integer(), integer() | 'unknown'}, node()}). -spec(local_load/0 :: () -> load()). -spec(remote_loads/0 :: () -> [load()]). --spec(pick/0 :: () -> erlang_node()). +-spec(pick/0 :: () -> node()). -endif. diff --git a/src/rabbit_misc.erl b/src/rabbit_misc.erl index 92ca6c0a..b247f486 100644 --- a/src/rabbit_misc.erl +++ b/src/rabbit_misc.erl @@ -86,7 +86,7 @@ kind :: Kind, name :: resource_name()}). --spec(method_record_type/1 :: (tuple()) -> atom()). +-spec(method_record_type/1 :: (rabbit_framing:amqp_method_record()) -> atom()). -spec(polite_pause/0 :: () -> 'done'). -spec(polite_pause/1 :: (non_neg_integer()) -> 'done'). -spec(die/1 :: (atom()) -> no_return()). @@ -126,8 +126,8 @@ rabbit:vhost(), rabbit:thunk(A)) -> A). -spec(execute_mnesia_transaction/1 :: (rabbit:thunk(A)) -> A). -spec(ensure_ok/2 :: (ok_or_error(), atom()) -> 'ok'). --spec(makenode/1 :: ({string(), string()} | string()) -> rabbit:erlang_node()). --spec(nodeparts/1 :: (rabbit:erlang_node() | string()) -> {string(), string()}). +-spec(makenode/1 :: ({string(), string()} | string()) -> node()). +-spec(nodeparts/1 :: (node() | string()) -> {string(), string()}). -spec(cookie_hash/0 :: () -> string()). -spec(tcp_name/3 :: (atom(), inet:ip_address(), rabbit:ip_port()) -> atom()). -spec(intersperse/2 :: (A, [A]) -> [A]). diff --git a/src/rabbit_mnesia.erl b/src/rabbit_mnesia.erl index a3cac45c..d1d90dbf 100644 --- a/src/rabbit_mnesia.erl +++ b/src/rabbit_mnesia.erl @@ -51,13 +51,13 @@ -ifdef(use_specs). -type(node_type() :: disc_only | disc | ram | unknown). --spec(status/0 :: () -> [{'nodes', [{node_type(), [rabbit:erlang_node()]}]} | - {'running_nodes', [rabbit:erlang_node()]}]). +-spec(status/0 :: () -> [{'nodes', [{node_type(), [node()]}]} | + {'running_nodes', [node()]}]). -spec(dir/0 :: () -> file:filename()). -spec(ensure_mnesia_dir/0 :: () -> 'ok'). -spec(init/0 :: () -> 'ok'). -spec(is_db_empty/0 :: () -> boolean()). --spec(cluster/1 :: ([rabbit:erlang_node()]) -> 'ok'). +-spec(cluster/1 :: ([node()]) -> 'ok'). -spec(reset/0 :: () -> 'ok'). -spec(force_reset/0 :: () -> 'ok'). -spec(is_clustered/0 :: () -> boolean()). diff --git a/src/rabbit_networking.erl b/src/rabbit_networking.erl index 758741e8..6213811c 100644 --- a/src/rabbit_networking.erl +++ b/src/rabbit_networking.erl @@ -66,7 +66,7 @@ -type(connection() :: pid()). -type(listener() :: - #listener{node :: rabbit:erlang_node(), + #listener{node :: node(), protocol :: atom(), host :: rabbit:hostname(), port :: rabbit:ip_port()}). @@ -77,7 +77,7 @@ -> 'ok'). -spec(stop_tcp_listener/2 :: (rabbit:hostname(), rabbit:ip_port()) -> 'ok'). -spec(active_listeners/0 :: () -> [listener()]). --spec(node_listeners/1 :: (rabbit:erlang_node()) -> [listener()]). +-spec(node_listeners/1 :: (node()) -> [listener()]). -spec(connections/0 :: () -> [connection()]). -spec(connection_info_keys/0 :: () -> [rabbit:info_key()]). -spec(connection_info/1 :: (connection()) -> [rabbit:info()]). @@ -85,7 +85,7 @@ -spec(connection_info_all/0 :: () -> [[rabbit:info()]]). -spec(connection_info_all/1 :: ([rabbit:info_key()]) -> [[rabbit:info()]]). -spec(close_connection/2 :: (pid(), string()) -> 'ok'). --spec(on_node_down/1 :: (rabbit:erlang_node()) -> 'ok'). +-spec(on_node_down/1 :: (node()) -> 'ok'). -spec(check_tcp_listener_address/3 :: (atom(), rabbit:hostname(), rabbit:ip_port()) -> {inet:ip_address(), atom()}). -- cgit v1.2.1 From feed2048fa0a7d532b2216a992a8aa740da3a1dd Mon Sep 17 00:00:00 2001 From: Alexandru Scvortov Date: Fri, 2 Jul 2010 16:11:50 +0100 Subject: improved types --- src/rabbit.erl | 7 ++----- src/rabbit_access_control.erl | 11 +++++------ src/rabbit_amqqueue.erl | 7 ++++--- src/rabbit_misc.erl | 35 ++++++++++++++++++++--------------- 4 files changed, 31 insertions(+), 29 deletions(-) diff --git a/src/rabbit.erl b/src/rabbit.erl index e6bc240e..7bf87534 100644 --- a/src/rabbit.erl +++ b/src/rabbit.erl @@ -39,8 +39,8 @@ -export([log_location/1]). --export_type([regexp/0, txn/0, thunk/1,maybe/1, info/0, info_key/0, - msg_id/0, message/0, basic_message/0, +-export_type([txn/0, maybe/1, info/0, info_key/0, + message/0, basic_message/0, delivery/0, content/0, decoded_content/0, undecoded_content/0, unencoded_content/0, encoded_content/0, vhost/0, ctag/0, ip_port/0, hostname/0]). @@ -191,8 +191,6 @@ -ifdef(use_specs). -type(maybe(T) :: T | 'none'). --type(thunk(T) :: fun(() -> T)). --type(regexp() :: binary()). -type(vhost() :: binary()). -type(ctag() :: binary()). @@ -236,7 +234,6 @@ %% this is really an abstract type, but dialyzer does not support them -type(txn() :: rabbit_guid:guid()). %% this really should be an abstract type --type(msg_id() :: non_neg_integer()). -type(log_location() :: 'tty' | 'undefined' | file:filename()). -type(file_suffix() :: binary()). diff --git a/src/rabbit_access_control.erl b/src/rabbit_access_control.erl index fec09217..050277fb 100644 --- a/src/rabbit_access_control.erl +++ b/src/rabbit_access_control.erl @@ -52,6 +52,7 @@ -type(user() :: #user{username :: username(), password :: password()}). +-type(regexp() :: binary()). -spec(check_login/2 :: (binary(), binary()) -> user()). -spec(user_pass_login/2 :: (username(), password()) -> user()). @@ -67,15 +68,13 @@ -spec(add_vhost/1 :: (rabbit:vhost()) -> 'ok'). -spec(delete_vhost/1 :: (rabbit:vhost()) -> 'ok'). -spec(list_vhosts/0 :: () -> [rabbit:vhost()]). --spec(set_permissions/5 ::(username(), rabbit:vhost(), rabbit:regexp(), - rabbit:regexp(), rabbit:regexp()) -> 'ok'). +-spec(set_permissions/5 ::(username(), rabbit:vhost(), regexp(), + regexp(), regexp()) -> 'ok'). -spec(clear_permissions/2 :: (username(), rabbit:vhost()) -> 'ok'). -spec(list_vhost_permissions/1 :: - (rabbit:vhost()) -> [{username(), rabbit:regexp(), - rabbit:regexp(), rabbit:regexp()}]). + (rabbit:vhost()) -> [{username(), regexp(), regexp(), regexp()}]). -spec(list_user_permissions/1 :: - (username()) -> [{rabbit:vhost(), rabbit:regexp(), - rabbit:regexp(), rabbit:regexp()}]). + (username()) -> [{rabbit:vhost(), regexp(), regexp(), regexp()}]). -endif. diff --git a/src/rabbit_amqqueue.erl b/src/rabbit_amqqueue.erl index 7b9fcaac..c4ba9344 100644 --- a/src/rabbit_amqqueue.erl +++ b/src/rabbit_amqqueue.erl @@ -72,7 +72,8 @@ -type(qstats() :: {'ok', name(), non_neg_integer(), non_neg_integer()}). -type(qlen() :: {'ok', non_neg_integer()}). -type(qfun(A) :: fun ((amqqueue()) -> A)). --type(qmsg() :: {name(), pid(), rabbit:msg_id(), boolean(), rabbit:message()}). +-type(qmsg() :: {name(), pid(), msg_id(), boolean(), rabbit:message()}). +-type(msg_id() :: non_neg_integer()). -type(ok_or_errors() :: 'ok' | {'error', [{'error' | 'exit' | 'throw', any()}]}). @@ -103,8 +104,8 @@ {'error', 'not_empty'}). -spec(purge/1 :: (amqqueue()) -> qlen()). -spec(deliver/2 :: (pid(), rabbit:delivery()) -> boolean()). --spec(requeue/3 :: (pid(), [rabbit:msg_id()], pid()) -> 'ok'). --spec(ack/4 :: (pid(), rabbit:maybe(rabbit:txn()), [rabbit:msg_id()], pid()) +-spec(requeue/3 :: (pid(), [msg_id()], pid()) -> 'ok'). +-spec(ack/4 :: (pid(), rabbit:maybe(rabbit:txn()), [msg_id()], pid()) -> 'ok'). -spec(commit_all/3 :: ([pid()], rabbit:txn(), pid()) -> ok_or_errors()). -spec(rollback_all/3 :: ([pid()], rabbit:txn(), pid()) -> 'ok'). diff --git a/src/rabbit_misc.erl b/src/rabbit_misc.erl index b247f486..bf4aaeb4 100644 --- a/src/rabbit_misc.erl +++ b/src/rabbit_misc.erl @@ -76,25 +76,31 @@ -type(ok_or_error() :: 'ok' | {'error', any()}). -type(amqp_error() :: - #amqp_error{name :: atom(), + #amqp_error{name :: rabbit_framing:amqp_exception(), explanation :: string(), - method :: atom()}). + method :: rabbit_framing:amqp_method_name()}). -type(not_found() :: {'error', 'not_found'}). -type(resource_name() :: binary()). -type(r(Kind) :: #resource{virtual_host :: rabbit:vhost(), kind :: Kind, name :: resource_name()}). +-type(thunk(T) :: fun(() -> T)). --spec(method_record_type/1 :: (rabbit_framing:amqp_method_record()) -> atom()). +-spec(method_record_type/1 :: (rabbit_framing:amqp_method_record()) + -> rabbit_framing:amqp_method_name()). -spec(polite_pause/0 :: () -> 'done'). -spec(polite_pause/1 :: (non_neg_integer()) -> 'done'). --spec(die/1 :: (atom()) -> no_return()). --spec(frame_error/2 :: (atom(), binary()) -> no_return()). +-spec(die/1 :: (rabbit_framing:amqp_exception()) -> no_return()). +-spec(frame_error/2 :: (rabbit_framing:amqp_method_name(), binary()) + -> no_return()). -spec(amqp_error/4 :: - (atom(), string(), [any()], atom()) -> rabbit_misc:amqp_error()). --spec(protocol_error/3 :: (atom(), string(), [any()]) -> no_return()). --spec(protocol_error/4 :: (atom(), string(), [any()], atom()) -> no_return()). + (rabbit_framing:amqp_exception(), string(), [any()], + rabbit_framing:amqp_method_name()) -> rabbit_misc:amqp_error()). +-spec(protocol_error/3 :: (rabbit_framing:amqp_exception(), string(), [any()]) + -> no_return()). +-spec(protocol_error/4 :: (rabbit_framing:amqp_exception(), string(), [any()], + rabbit_framing:amqp_method_name()) -> no_return()). -spec(not_found/1 :: (r(atom())) -> no_return()). -spec(get_config/1 :: (atom()) -> {'ok', any()} | not_found()). -spec(get_config/2 :: (atom(), A) -> A). @@ -116,15 +122,14 @@ -spec(report_cover/0 :: () -> 'ok'). -spec(enable_cover/1 :: (file:filename()) -> ok_or_error()). -spec(report_cover/1 :: (file:filename()) -> 'ok'). --spec(throw_on_error/2 :: - (atom(), rabbit:thunk({error, any()} | {ok, A} | A)) -> A). --spec(with_exit_handler/2 :: (rabbit:thunk(A), rabbit:thunk(A)) -> A). +-spec(throw_on_error/2 :: (atom(), thunk({error, any()} | {ok, A} | A)) -> A). +-spec(with_exit_handler/2 :: (thunk(A), thunk(A)) -> A). -spec(filter_exit_map/2 :: (fun ((A) -> B), [A]) -> [B]). --spec(with_user/2 :: (rabbit_access_control:username(), rabbit:thunk(A)) -> A). --spec(with_vhost/2 :: (rabbit:vhost(), rabbit:thunk(A)) -> A). +-spec(with_user/2 :: (rabbit_access_control:username(), thunk(A)) -> A). +-spec(with_vhost/2 :: (rabbit:vhost(), thunk(A)) -> A). -spec(with_user_and_vhost/3 :: (rabbit_access_control:username(), - rabbit:vhost(), rabbit:thunk(A)) -> A). --spec(execute_mnesia_transaction/1 :: (rabbit:thunk(A)) -> A). + rabbit:vhost(), thunk(A)) -> A). +-spec(execute_mnesia_transaction/1 :: (thunk(A)) -> A). -spec(ensure_ok/2 :: (ok_or_error(), atom()) -> 'ok'). -spec(makenode/1 :: ({string(), string()} | string()) -> node()). -spec(nodeparts/1 :: (node() | string()) -> {string(), string()}). -- cgit v1.2.1 From 81ca684267ff9f914846340c13a0db79abe7ad1f Mon Sep 17 00:00:00 2001 From: Alexandru Scvortov Date: Mon, 5 Jul 2010 11:35:03 +0100 Subject: cleanup --- src/rabbit.erl | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/rabbit.erl b/src/rabbit.erl index 7bf87534..376e00dc 100644 --- a/src/rabbit.erl +++ b/src/rabbit.erl @@ -39,8 +39,7 @@ -export([log_location/1]). --export_type([txn/0, maybe/1, info/0, info_key/0, - message/0, basic_message/0, +-export_type([txn/0, maybe/1, info/0, info_key/0, message/0, basic_message/0, delivery/0, content/0, decoded_content/0, undecoded_content/0, unencoded_content/0, encoded_content/0, vhost/0, ctag/0, ip_port/0, hostname/0]). -- cgit v1.2.1 From 6a67fc1e887b427feaaa1511be2ccbbae905fbe5 Mon Sep 17 00:00:00 2001 From: Alexandru Scvortov Date: Mon, 5 Jul 2010 14:18:06 +0100 Subject: added missing export_types --- codegen.py | 2 +- src/rabbit_invariable_queue.erl | 2 +- src/rabbit_misc.erl | 2 +- src/rabbit_tests.erl | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/codegen.py b/codegen.py index 81cbc506..ca1d235b 100644 --- a/codegen.py +++ b/codegen.py @@ -334,7 +334,7 @@ def genErl(spec): -export_type([amqp_table/0, amqp_property_type/0, amqp_method_record/0, amqp_method_name/0, amqp_method/0, amqp_class_id/0, - amqp_value/0, amqp_array/0]). + amqp_value/0, amqp_array/0, amqp_exception/0, amqp_property_record/0]). bitvalue(true) -> 1; bitvalue(false) -> 0; diff --git a/src/rabbit_invariable_queue.erl b/src/rabbit_invariable_queue.erl index df8adb2e..d3f89ab9 100644 --- a/src/rabbit_invariable_queue.erl +++ b/src/rabbit_invariable_queue.erl @@ -52,7 +52,7 @@ -type(state() :: #iv_state { queue :: queue(), qname :: rabbit_amqqueue:name(), len :: non_neg_integer(), - pending_ack :: dict:dictionary() + pending_ack :: dict() }). -include("rabbit_backing_queue_spec.hrl"). diff --git a/src/rabbit_misc.erl b/src/rabbit_misc.erl index bf4aaeb4..535af2c8 100644 --- a/src/rabbit_misc.erl +++ b/src/rabbit_misc.erl @@ -161,7 +161,7 @@ ('lt' | 'lte' | 'eq' | 'gte' | 'gt')) -> boolean()). -spec(recursive_delete/1 :: ([file:filename()]) -> 'ok' | {'error', {file:filename(), any()}}). --spec(dict_cons/3 :: (any(), any(), dict:dictionary()) -> dict:dictionary()). +-spec(dict_cons/3 :: (any(), any(), dict()) -> dict()). -spec(unlink_and_capture_exit/1 :: (pid()) -> 'ok'). -endif. diff --git a/src/rabbit_tests.erl b/src/rabbit_tests.erl index d3813bc7..ad7a11c6 100644 --- a/src/rabbit_tests.erl +++ b/src/rabbit_tests.erl @@ -953,7 +953,7 @@ test_memory_pressure() -> ok = test_memory_pressure_receive_flow(true), %% if we publish at this point, the channel should die - Content = rabbit_basic:build_content([], <<>>), + Content = rabbit_basic:build_content(#'P_basic'{}, <<>>), ok = rabbit_channel:do(Ch0, #'basic.publish'{}, Content), expect_normal_channel_termination(MRef0, Ch0), -- cgit v1.2.1 From d84e67b9e089c41eab143045f37183e87d46534d Mon Sep 17 00:00:00 2001 From: Alexandru Scvortov Date: Mon, 5 Jul 2010 23:39:33 +0100 Subject: moved export_types to inside ifdefs --- codegen.py | 50 +++++++++++++++++++++++-------------------- src/rabbit.erl | 10 ++++----- src/rabbit_access_control.erl | 3 ++- src/rabbit_amqqueue.erl | 4 ++-- src/rabbit_channel.erl | 4 ++-- src/rabbit_exchange.erl | 4 ++-- src/rabbit_guid.erl | 4 ++-- src/rabbit_misc.erl | 4 ++-- src/rabbit_mnesia.erl | 4 ++-- src/rabbit_net.erl | 3 ++- src/rabbit_router.erl | 3 ++- 11 files changed, 50 insertions(+), 43 deletions(-) diff --git a/codegen.py b/codegen.py index ca1d235b..1244aae1 100644 --- a/codegen.py +++ b/codegen.py @@ -332,29 +332,14 @@ def genErl(spec): -export([lookup_amqp_exception/1]). -export([amqp_exception/1]). --export_type([amqp_table/0, amqp_property_type/0, amqp_method_record/0, +""" + print "%% Various types" + print "-ifdef(use_specs)." + + print """-export_type([amqp_table/0, amqp_property_type/0, amqp_method_record/0, amqp_method_name/0, amqp_method/0, amqp_class_id/0, amqp_value/0, amqp_array/0, amqp_exception/0, amqp_property_record/0]). -bitvalue(true) -> 1; -bitvalue(false) -> 0; -bitvalue(undefined) -> 0. - -%% Method signatures --ifdef(use_specs). --spec(lookup_method_name/1 :: (amqp_method()) -> amqp_method_name()). --spec(method_id/1 :: (amqp_method_name()) -> amqp_method()). --spec(method_has_content/1 :: (amqp_method_name()) -> boolean()). --spec(is_method_synchronous/1 :: (amqp_method_record()) -> boolean()). --spec(method_record/1 :: (amqp_method_name()) -> amqp_method_record()). --spec(method_fieldnames/1 :: (amqp_method_name()) -> [amqp_method_field_name()]). --spec(decode_method_fields/2 :: (amqp_method_name(), binary()) -> amqp_method_record()). --spec(decode_properties/2 :: (non_neg_integer(), binary()) -> amqp_property_record()). --spec(encode_method_fields/1 :: (amqp_method_record()) -> binary()). --spec(encode_properties/1 :: (amqp_method_record()) -> binary()). --spec(lookup_amqp_exception/1 :: (amqp_exception()) -> {boolean(), amqp_exception_code(), binary()}). --spec(amqp_exception/1 :: (amqp_exception_code()) -> amqp_exception()). - -type(amqp_field_type() :: 'longstr' | 'signedint' | 'decimal' | 'timestamp' | 'table' | 'byte' | 'double' | 'float' | 'long' | @@ -379,10 +364,8 @@ bitvalue(undefined) -> 0. 'undefined' | % void non_neg_integer() % timestamp ). --endif. % use_specs """ - print "-ifdef(use_specs)." - print "%% Various types" + print prettyType("amqp_method_name()", [m.erlangName() for m in methods]) print prettyType("amqp_method()", @@ -409,6 +392,27 @@ bitvalue(undefined) -> 0. ["%i" % ci for ci in classIds]) print "-endif. % use_specs" + print """ +%% Method signatures +-ifdef(use_specs). +-spec(lookup_method_name/1 :: (amqp_method()) -> amqp_method_name()). +-spec(method_id/1 :: (amqp_method_name()) -> amqp_method()). +-spec(method_has_content/1 :: (amqp_method_name()) -> boolean()). +-spec(is_method_synchronous/1 :: (amqp_method_record()) -> boolean()). +-spec(method_record/1 :: (amqp_method_name()) -> amqp_method_record()). +-spec(method_fieldnames/1 :: (amqp_method_name()) -> [amqp_method_field_name()]). +-spec(decode_method_fields/2 :: (amqp_method_name(), binary()) -> amqp_method_record()). +-spec(decode_properties/2 :: (non_neg_integer(), binary()) -> amqp_property_record()). +-spec(encode_method_fields/1 :: (amqp_method_record()) -> binary()). +-spec(encode_properties/1 :: (amqp_method_record()) -> binary()). +-spec(lookup_amqp_exception/1 :: (amqp_exception()) -> {boolean(), amqp_exception_code(), binary()}). +-spec(amqp_exception/1 :: (amqp_exception_code()) -> amqp_exception()). +-endif. % use_specs + +bitvalue(true) -> 1; +bitvalue(false) -> 0; +bitvalue(undefined) -> 0. +""" for m in methods: genLookupMethodName(m) print "lookup_method_name({_ClassId, _MethodId} = Id) -> exit({unknown_method_id, Id})." diff --git a/src/rabbit.erl b/src/rabbit.erl index 376e00dc..9f3481d2 100644 --- a/src/rabbit.erl +++ b/src/rabbit.erl @@ -39,11 +39,6 @@ -export([log_location/1]). --export_type([txn/0, maybe/1, info/0, info_key/0, message/0, basic_message/0, - delivery/0, content/0, decoded_content/0, undecoded_content/0, - unencoded_content/0, encoded_content/0, vhost/0, ctag/0, - ip_port/0, hostname/0]). - %%--------------------------------------------------------------------------- %% Boot steps. -export([maybe_insert_default_data/0]). @@ -189,6 +184,11 @@ -ifdef(use_specs). +-export_type([txn/0, maybe/1, info/0, info_key/0, message/0, basic_message/0, + delivery/0, content/0, decoded_content/0, undecoded_content/0, + unencoded_content/0, encoded_content/0, vhost/0, ctag/0, + ip_port/0, hostname/0]). + -type(maybe(T) :: T | 'none'). -type(vhost() :: binary()). -type(ctag() :: binary()). diff --git a/src/rabbit_access_control.erl b/src/rabbit_access_control.erl index 050277fb..f9fd2c31 100644 --- a/src/rabbit_access_control.erl +++ b/src/rabbit_access_control.erl @@ -40,12 +40,13 @@ -export([add_vhost/1, delete_vhost/1, list_vhosts/0]). -export([set_permissions/5, clear_permissions/2, list_vhost_permissions/1, list_user_permissions/1]). --export_type([username/0]). %%---------------------------------------------------------------------------- -ifdef(use_specs). +-export_type([username/0]). + -type(permission_atom() :: 'configure' | 'read' | 'write'). -type(username() :: binary()). -type(password() :: binary()). diff --git a/src/rabbit_amqqueue.erl b/src/rabbit_amqqueue.erl index ffa46642..e1bb413e 100644 --- a/src/rabbit_amqqueue.erl +++ b/src/rabbit_amqqueue.erl @@ -47,8 +47,6 @@ -export([commit_all/3, rollback_all/3, notify_down_all/2, limit_all/3]). -export([on_node_down/1]). --export_type([amqqueue/0, name/0, qmsg/0]). - -import(mnesia). -import(gen_server2). -import(lists). @@ -61,6 +59,8 @@ -ifdef(use_specs). +-export_type([amqqueue/0, name/0, qmsg/0]). + -type(name() :: rabbit_misc:r('queue')). -type(amqqueue() :: #amqqueue{name :: name(), diff --git a/src/rabbit_channel.erl b/src/rabbit_channel.erl index 915a41ee..a0f09f4c 100644 --- a/src/rabbit_channel.erl +++ b/src/rabbit_channel.erl @@ -44,8 +44,6 @@ -export([init/1, terminate/2, code_change/3, handle_call/3, handle_cast/2, handle_info/2, handle_pre_hibernate/1]). --export_type([channel_number/0]). - -record(ch, {state, channel, reader_pid, writer_pid, limiter_pid, transaction_id, tx_participants, next_tag, uncommitted_ack_q, unacked_message_q, @@ -73,6 +71,8 @@ -ifdef(use_specs). +-export_type([channel_number/0]). + -type(ref() :: any()). -type(channel_number() :: non_neg_integer()). diff --git a/src/rabbit_exchange.erl b/src/rabbit_exchange.erl index 0e5b9baf..de29ccb3 100644 --- a/src/rabbit_exchange.erl +++ b/src/rabbit_exchange.erl @@ -43,8 +43,6 @@ -export([assert_args_equivalence/2]). -export([check_type/1]). --export_type([name/0, exchange/0, binding/0]). - %% EXTENDED API -export([list_exchange_bindings/1]). -export([list_queue_bindings/1]). @@ -58,6 +56,8 @@ -ifdef(use_specs). +-export_type([name/0, exchange/0, binding/0]). + -type(name() :: rabbit_misc:r('exchange')). -type(exchange() :: #exchange{name :: name(), diff --git a/src/rabbit_guid.erl b/src/rabbit_guid.erl index a44e0f58..6afbbee9 100644 --- a/src/rabbit_guid.erl +++ b/src/rabbit_guid.erl @@ -41,8 +41,6 @@ -export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]). --export_type([guid/0]). - -define(SERVER, ?MODULE). -define(SERIAL_FILENAME, "rabbit_serial"). @@ -52,6 +50,8 @@ -ifdef(use_specs). +-export_type([guid/0]). + -type(guid() :: binary()). -spec(start_link/0 :: () -> {'ok', pid()} | 'ignore' | {'error', any()}). diff --git a/src/rabbit_misc.erl b/src/rabbit_misc.erl index 535af2c8..88a5e505 100644 --- a/src/rabbit_misc.erl +++ b/src/rabbit_misc.erl @@ -63,8 +63,6 @@ -export([version_compare/2, version_compare/3]). -export([recursive_delete/1, dict_cons/3, unlink_and_capture_exit/1]). --export_type([not_found/0, amqp_error/0, r/1]). - -import(mnesia). -import(lists). -import(cover). @@ -74,6 +72,8 @@ -ifdef(use_specs). +-export_type([not_found/0, amqp_error/0, r/1]). + -type(ok_or_error() :: 'ok' | {'error', any()}). -type(amqp_error() :: #amqp_error{name :: rabbit_framing:amqp_exception(), diff --git a/src/rabbit_mnesia.erl b/src/rabbit_mnesia.erl index d1d90dbf..c8e58df4 100644 --- a/src/rabbit_mnesia.erl +++ b/src/rabbit_mnesia.erl @@ -42,14 +42,14 @@ %% other mnesia-using Erlang applications, such as ejabberd -export([create_tables/0]). --export_type([node_type/0]). - -include("rabbit.hrl"). %%---------------------------------------------------------------------------- -ifdef(use_specs). +-export_type([node_type/0]). + -type(node_type() :: disc_only | disc | ram | unknown). -spec(status/0 :: () -> [{'nodes', [{node_type(), [node()]}]} | {'running_nodes', [node()]}]). diff --git a/src/rabbit_net.erl b/src/rabbit_net.erl index 1232b457..1892e498 100644 --- a/src/rabbit_net.erl +++ b/src/rabbit_net.erl @@ -35,12 +35,13 @@ -export([async_recv/3, close/1, controlling_process/2, getstat/2, peername/1, port_command/2, send/2, sockname/1]). --export_type([socket/0]). %%--------------------------------------------------------------------------- -ifdef(use_specs). +-export_type([socket/0]). + -type(stat_option() :: 'recv_cnt' | 'recv_max' | 'recv_avg' | 'recv_oct' | 'recv_dvi' | 'send_cnt' | 'send_max' | 'send_avg' | 'send_oct' | 'send_pend'). diff --git a/src/rabbit_router.erl b/src/rabbit_router.erl index 86ce4128..eb5beb2a 100644 --- a/src/rabbit_router.erl +++ b/src/rabbit_router.erl @@ -36,12 +36,13 @@ -export([deliver/2, match_bindings/2, match_routing_key/2]). --export_type([routing_key/0, routing_result/0]). %%---------------------------------------------------------------------------- -ifdef(use_specs). +-export_type([routing_key/0, routing_result/0]). + -type(routing_key() :: binary()). -type(routing_result() :: 'routed' | 'unroutable' | 'not_delivered'). -- cgit v1.2.1 From bd82f6fd37569adcf1602ae01366cd3fef523416 Mon Sep 17 00:00:00 2001 From: Alexandru Scvortov Date: Tue, 6 Jul 2010 00:22:29 +0100 Subject: moved common types rabbit_types; move net types to rabbit_networking --- include/rabbit_backing_queue_spec.hrl | 14 +++--- include/rabbit_exchange_type_spec.hrl | 2 +- src/rabbit.erl | 54 +-------------------- src/rabbit_access_control.erl | 16 +++---- src/rabbit_amqqueue.erl | 42 ++++++++--------- src/rabbit_basic.erl | 16 +++---- src/rabbit_binary_generator.erl | 6 +-- src/rabbit_binary_parser.erl | 4 +- src/rabbit_channel.erl | 16 +++---- src/rabbit_exchange.erl | 18 +++---- src/rabbit_misc.erl | 16 +++---- src/rabbit_net.erl | 6 +-- src/rabbit_networking.erl | 24 +++++----- src/rabbit_persister.erl | 10 ++-- src/rabbit_reader.erl | 6 +-- src/rabbit_router.erl | 2 +- src/rabbit_types.erl | 89 +++++++++++++++++++++++++++++++++++ src/rabbit_writer.erl | 8 ++-- 18 files changed, 194 insertions(+), 155 deletions(-) create mode 100644 src/rabbit_types.erl diff --git a/include/rabbit_backing_queue_spec.hrl b/include/rabbit_backing_queue_spec.hrl index 0cef2379..05dc1464 100644 --- a/include/rabbit_backing_queue_spec.hrl +++ b/include/rabbit_backing_queue_spec.hrl @@ -31,7 +31,7 @@ -type(fetch_result() :: %% Message, IsDelivered, AckTag, Remaining_Len - ('empty'|{rabbit:basic_message(), boolean(), ack(), non_neg_integer()})). + ('empty'|{rabbit_types:basic_message(), boolean(), ack(), non_neg_integer()})). -type(is_durable() :: boolean()). -type(attempt_recovery() :: boolean()). -type(purged_msg_count() :: non_neg_integer()). @@ -42,15 +42,15 @@ -spec(terminate/1 :: (state()) -> state()). -spec(delete_and_terminate/1 :: (state()) -> state()). -spec(purge/1 :: (state()) -> {purged_msg_count(), state()}). --spec(publish/2 :: (rabbit:basic_message(), state()) -> state()). +-spec(publish/2 :: (rabbit_types:basic_message(), state()) -> state()). -spec(publish_delivered/3 :: - (ack_required(), rabbit:basic_message(), state()) -> {ack(), state()}). + (ack_required(), rabbit_types:basic_message(), state()) -> {ack(), state()}). -spec(fetch/2 :: (ack_required(), state()) -> {fetch_result(), state()}). -spec(ack/2 :: ([ack()], state()) -> state()). --spec(tx_publish/3 :: (rabbit:txn(), rabbit:basic_message(), state()) -> state()). --spec(tx_ack/3 :: (rabbit:txn(), [ack()], state()) -> state()). --spec(tx_rollback/2 :: (rabbit:txn(), state()) -> {[ack()], state()}). --spec(tx_commit/3 :: (rabbit:txn(), fun (() -> any()), state()) -> {[ack()], state()}). +-spec(tx_publish/3 :: (rabbit_types:txn(), rabbit_types:basic_message(), state()) -> state()). +-spec(tx_ack/3 :: (rabbit_types:txn(), [ack()], state()) -> state()). +-spec(tx_rollback/2 :: (rabbit_types:txn(), state()) -> {[ack()], state()}). +-spec(tx_commit/3 :: (rabbit_types:txn(), fun (() -> any()), state()) -> {[ack()], state()}). -spec(requeue/2 :: ([ack()], state()) -> state()). -spec(len/1 :: (state()) -> non_neg_integer()). -spec(is_empty/1 :: (state()) -> boolean()). diff --git a/include/rabbit_exchange_type_spec.hrl b/include/rabbit_exchange_type_spec.hrl index dbbe74f0..5a010c0d 100644 --- a/include/rabbit_exchange_type_spec.hrl +++ b/include/rabbit_exchange_type_spec.hrl @@ -31,7 +31,7 @@ -ifdef(use_specs). -spec(description/0 :: () -> [{atom(), any()}]). --spec(publish/2 :: (rabbit_exchange:exchange(), rabbit:delivery()) +-spec(publish/2 :: (rabbit_exchange:exchange(), rabbit_types:delivery()) -> {rabbit_router:routing_result(), [pid()]}). -spec(validate/1 :: (rabbit_exchange:exchange()) -> 'ok'). -spec(create/1 :: (rabbit_exchange:exchange()) -> 'ok'). diff --git a/src/rabbit.erl b/src/rabbit.erl index 9f3481d2..3ebbd072 100644 --- a/src/rabbit.erl +++ b/src/rabbit.erl @@ -176,7 +176,6 @@ -include("rabbit_framing.hrl"). -include("rabbit.hrl"). --include_lib("kernel/include/inet.hrl"). -define(APPS, [os_mon, mnesia, rabbit]). @@ -184,60 +183,9 @@ -ifdef(use_specs). --export_type([txn/0, maybe/1, info/0, info_key/0, message/0, basic_message/0, - delivery/0, content/0, decoded_content/0, undecoded_content/0, - unencoded_content/0, encoded_content/0, vhost/0, ctag/0, - ip_port/0, hostname/0]). - --type(maybe(T) :: T | 'none'). --type(vhost() :: binary()). --type(ctag() :: binary()). - -%% TODO: make this more precise by tying specific class_ids to -%% specific properties --type(undecoded_content() :: - #content{class_id :: rabbit_framing:amqp_class_id(), - properties :: 'none', - properties_bin :: binary(), - payload_fragments_rev :: [binary()]} | - #content{class_id :: rabbit_framing:amqp_class_id(), - properties :: rabbit_framing:amqp_property_record(), - properties_bin :: 'none', - payload_fragments_rev :: [binary()]}). --type(unencoded_content() :: undecoded_content()). --type(decoded_content() :: - #content{class_id :: rabbit_framing:amqp_class_id(), - properties :: rabbit_framing:amqp_property_record(), - properties_bin :: rabbit:maybe(binary()), - payload_fragments_rev :: [binary()]}). --type(encoded_content() :: - #content{class_id :: rabbit_framing:amqp_class_id(), - properties :: rabbit:maybe(rabbit_framing:amqp_property_record()), - properties_bin :: binary(), - payload_fragments_rev :: [binary()]}). --type(content() :: undecoded_content() | decoded_content()). --type(basic_message() :: - #basic_message{exchange_name :: rabbit_exchange:name(), - routing_key :: rabbit_router:routing_key(), - content :: content(), - guid :: rabbit_guid:guid(), - is_persistent :: boolean()}). --type(message() :: basic_message()). --type(delivery() :: - #delivery{mandatory :: boolean(), - immediate :: boolean(), - txn :: rabbit:maybe(rabbit:txn()), - sender :: pid(), - message :: message()}). - -%% this is really an abstract type, but dialyzer does not support them --type(txn() :: rabbit_guid:guid()). +-type(file_suffix() :: binary()). %% this really should be an abstract type -type(log_location() :: 'tty' | 'undefined' | file:filename()). --type(file_suffix() :: binary()). - --type(info_key() :: atom()). --type(info() :: {info_key(), any()}). -spec(prepare/0 :: () -> 'ok'). -spec(start/0 :: () -> 'ok'). diff --git a/src/rabbit_access_control.erl b/src/rabbit_access_control.erl index f9fd2c31..973851a4 100644 --- a/src/rabbit_access_control.erl +++ b/src/rabbit_access_control.erl @@ -57,7 +57,7 @@ -spec(check_login/2 :: (binary(), binary()) -> user()). -spec(user_pass_login/2 :: (username(), password()) -> user()). --spec(check_vhost_access/2 :: (user(), rabbit:vhost()) -> 'ok'). +-spec(check_vhost_access/2 :: (user(), rabbit_types:vhost()) -> 'ok'). -spec(check_resource_access/3 :: (username(), rabbit_misc:r(atom()), permission_atom()) -> 'ok'). -spec(add_user/2 :: (username(), password()) -> 'ok'). @@ -66,16 +66,16 @@ -spec(list_users/0 :: () -> [username()]). -spec(lookup_user/1 :: (username()) -> {'ok', user()} | rabbit_misc:not_found()). --spec(add_vhost/1 :: (rabbit:vhost()) -> 'ok'). --spec(delete_vhost/1 :: (rabbit:vhost()) -> 'ok'). --spec(list_vhosts/0 :: () -> [rabbit:vhost()]). --spec(set_permissions/5 ::(username(), rabbit:vhost(), regexp(), +-spec(add_vhost/1 :: (rabbit_types:vhost()) -> 'ok'). +-spec(delete_vhost/1 :: (rabbit_types:vhost()) -> 'ok'). +-spec(list_vhosts/0 :: () -> [rabbit_types:vhost()]). +-spec(set_permissions/5 ::(username(), rabbit_types:vhost(), regexp(), regexp(), regexp()) -> 'ok'). --spec(clear_permissions/2 :: (username(), rabbit:vhost()) -> 'ok'). +-spec(clear_permissions/2 :: (username(), rabbit_types:vhost()) -> 'ok'). -spec(list_vhost_permissions/1 :: - (rabbit:vhost()) -> [{username(), regexp(), regexp(), regexp()}]). + (rabbit_types:vhost()) -> [{username(), regexp(), regexp(), regexp()}]). -spec(list_user_permissions/1 :: - (username()) -> [{rabbit:vhost(), regexp(), regexp(), regexp()}]). + (username()) -> [{rabbit_types:vhost(), regexp(), regexp(), regexp()}]). -endif. diff --git a/src/rabbit_amqqueue.erl b/src/rabbit_amqqueue.erl index e1bb413e..9e271c8e 100644 --- a/src/rabbit_amqqueue.erl +++ b/src/rabbit_amqqueue.erl @@ -66,38 +66,38 @@ #amqqueue{name :: name(), durable :: boolean(), auto_delete :: boolean(), - exclusive_owner :: rabbit:maybe(pid()), + exclusive_owner :: rabbit_types:maybe(pid()), arguments :: rabbit_framing:amqp_table(), - pid :: rabbit:maybe(pid())}). + pid :: rabbit_types:maybe(pid())}). -type(qlen() :: {'ok', non_neg_integer()}). -type(qfun(A) :: fun ((amqqueue()) -> A)). --type(qmsg() :: {name(), pid(), msg_id(), boolean(), rabbit:message()}). +-type(qmsg() :: {name(), pid(), msg_id(), boolean(), rabbit_types:message()}). -type(msg_id() :: non_neg_integer()). -type(ok_or_errors() :: 'ok' | {'error', [{'error' | 'exit' | 'throw', any()}]}). -spec(start/0 :: () -> 'ok'). -spec(declare/5 :: (name(), boolean(), boolean(), rabbit_framing:amqp_table(), - rabbit:maybe(pid())) -> {'new' | 'existing', amqqueue()}). + rabbit_types:maybe(pid())) -> {'new' | 'existing', amqqueue()}). -spec(lookup/1 :: (name()) -> {'ok', amqqueue()} | rabbit_misc:not_found()). -spec(with/2 :: (name(), qfun(A)) -> A | rabbit_misc:not_found()). -spec(with_or_die/2 :: (name(), qfun(A)) -> A). -spec(assert_equivalence/5 :: (amqqueue(), boolean(), boolean(), - rabbit_framing:amqp_table(), rabbit:maybe(pid)) + rabbit_framing:amqp_table(), rabbit_types:maybe(pid)) -> ok). -spec(check_exclusive_access/2 :: (amqqueue(), pid()) -> 'ok'). -spec(with_exclusive_access_or_die/3 :: (name(), pid(), qfun(A)) -> A). --spec(list/1 :: (rabbit:vhost()) -> [amqqueue()]). --spec(info_keys/0 :: () -> [rabbit:info_key()]). --spec(info/1 :: (amqqueue()) -> [rabbit:info()]). --spec(info/2 :: (amqqueue(), [rabbit:info_key()]) -> [rabbit:info()]). --spec(info_all/1 :: (rabbit:vhost()) -> [[rabbit:info()]]). --spec(info_all/2 :: (rabbit:vhost(), [rabbit:info_key()]) - -> [[rabbit:info()]]). --spec(consumers/1 :: (amqqueue()) -> [{pid(), rabbit:ctag(), boolean()}]). --spec(consumers_all/1 :: (rabbit:vhost()) - -> [{name(), pid(), rabbit:ctag(), boolean()}]). +-spec(list/1 :: (rabbit_types:vhost()) -> [amqqueue()]). +-spec(info_keys/0 :: () -> [rabbit_types:info_key()]). +-spec(info/1 :: (amqqueue()) -> [rabbit_types:info()]). +-spec(info/2 :: (amqqueue(), [rabbit_types:info_key()]) -> [rabbit_types:info()]). +-spec(info_all/1 :: (rabbit_types:vhost()) -> [[rabbit_types:info()]]). +-spec(info_all/2 :: (rabbit_types:vhost(), [rabbit_types:info_key()]) + -> [[rabbit_types:info()]]). +-spec(consumers/1 :: (amqqueue()) -> [{pid(), rabbit_types:ctag(), boolean()}]). +-spec(consumers_all/1 :: (rabbit_types:vhost()) + -> [{name(), pid(), rabbit_types:ctag(), boolean()}]). -spec(stat/1 :: (amqqueue()) -> {'ok', non_neg_integer(), non_neg_integer()}). -spec(delete/3 :: @@ -108,21 +108,21 @@ {'error', 'in_use'} | {'error', 'not_empty'}). -spec(purge/1 :: (amqqueue()) -> qlen()). --spec(deliver/2 :: (pid(), rabbit:delivery()) -> boolean()). +-spec(deliver/2 :: (pid(), rabbit_types:delivery()) -> boolean()). -spec(requeue/3 :: (pid(), [msg_id()], pid()) -> 'ok'). --spec(ack/4 :: (pid(), rabbit:maybe(rabbit:txn()), [msg_id()], pid()) +-spec(ack/4 :: (pid(), rabbit_types:maybe(rabbit_types:txn()), [msg_id()], pid()) -> 'ok'). --spec(commit_all/3 :: ([pid()], rabbit:txn(), pid()) -> ok_or_errors()). --spec(rollback_all/3 :: ([pid()], rabbit:txn(), pid()) -> 'ok'). +-spec(commit_all/3 :: ([pid()], rabbit_types:txn(), pid()) -> ok_or_errors()). +-spec(rollback_all/3 :: ([pid()], rabbit_types:txn(), pid()) -> 'ok'). -spec(notify_down_all/2 :: ([pid()], pid()) -> ok_or_errors()). -spec(limit_all/3 :: ([pid()], pid(), pid() | 'undefined') -> ok_or_errors()). -spec(basic_get/3 :: (amqqueue(), pid(), boolean()) -> {'ok', non_neg_integer(), qmsg()} | 'empty'). -spec(basic_consume/7 :: (amqqueue(), boolean(), pid(), pid() | 'undefined', - rabbit:ctag(), boolean(), any()) + rabbit_types:ctag(), boolean(), any()) -> 'ok' | {'error', 'exclusive_consume_unavailable'}). --spec(basic_cancel/4 :: (amqqueue(), pid(), rabbit:ctag(), any()) -> 'ok'). +-spec(basic_cancel/4 :: (amqqueue(), pid(), rabbit_types:ctag(), any()) -> 'ok'). -spec(notify_sent/2 :: (pid(), pid()) -> 'ok'). -spec(unblock/2 :: (pid(), pid()) -> 'ok'). -spec(flush_all/2 :: ([pid()], pid()) -> 'ok'). diff --git a/src/rabbit_basic.erl b/src/rabbit_basic.erl index fb6f85dd..b4e685b2 100644 --- a/src/rabbit_basic.erl +++ b/src/rabbit_basic.erl @@ -46,24 +46,24 @@ -type(publish_result() :: ({ok, rabbit_router:routing_result(), [pid()]} | rabbit_misc:not_found())). --spec(publish/1 :: (rabbit:delivery()) -> publish_result()). --spec(delivery/4 :: (boolean(), boolean(), rabbit:maybe(rabbit:txn()), - rabbit:message()) -> rabbit:delivery()). +-spec(publish/1 :: (rabbit_types:delivery()) -> publish_result()). +-spec(delivery/4 :: (boolean(), boolean(), rabbit_types:maybe(rabbit_types:txn()), + rabbit_types:message()) -> rabbit_types:delivery()). -spec(message/4 :: (rabbit_exchange:name(), rabbit_router:routing_key(), properties_input(), binary()) - -> (rabbit:message() | {'error', any()})). + -> (rabbit_types:message() | {'error', any()})). -spec(properties/1 :: (properties_input()) -> rabbit_framing:amqp_property_record()). -spec(publish/4 :: (rabbit_exchange:name(), rabbit_router:routing_key(), properties_input(), binary()) -> publish_result()). -spec(publish/7 :: (rabbit_exchange:name(), rabbit_router:routing_key(), boolean(), boolean(), - rabbit:maybe(rabbit:txn()), properties_input(), binary()) -> + rabbit_types:maybe(rabbit_types:txn()), properties_input(), binary()) -> publish_result()). -spec(build_content/2 :: - (rabbit_framing:amqp_property_record(), binary()) -> rabbit:content()). --spec(from_content/1 :: (rabbit:content()) + (rabbit_framing:amqp_property_record(), binary()) -> rabbit_types:content()). +-spec(from_content/1 :: (rabbit_types:content()) -> {rabbit_framing:amqp_property_record(), binary()}). -spec(is_message_persistent/1 :: - (rabbit:decoded_content()) -> (boolean() | {'invalid', non_neg_integer()})). + (rabbit_types:decoded_content()) -> (boolean() | {'invalid', non_neg_integer()})). -endif. diff --git a/src/rabbit_binary_generator.erl b/src/rabbit_binary_generator.erl index a2af46c9..7b43a6a7 100644 --- a/src/rabbit_binary_generator.erl +++ b/src/rabbit_binary_generator.erl @@ -60,15 +60,15 @@ (rabbit_channel:channel_number(), rabbit_framing:amqp_method_record()) -> frame()). -spec(build_simple_content_frames/3 :: - (rabbit_channel:channel_number(), rabbit:content(), non_neg_integer()) + (rabbit_channel:channel_number(), rabbit_types:content(), non_neg_integer()) -> [frame()]). -spec(build_heartbeat_frame/0 :: () -> frame()). -spec(generate_table/1 :: (rabbit_framing:amqp_table()) -> binary()). -spec(encode_properties/2 :: ([rabbit_framing:amqp_property_type()], [any()]) -> binary()). -spec(check_empty_content_body_frame_size/0 :: () -> 'ok'). --spec(ensure_content_encoded/1 :: (rabbit:content()) -> rabbit:encoded_content()). --spec(clear_encoded_content/1 :: (rabbit:content()) -> rabbit:unencoded_content()). +-spec(ensure_content_encoded/1 :: (rabbit_types:content()) -> rabbit_types:encoded_content()). +-spec(clear_encoded_content/1 :: (rabbit_types:content()) -> rabbit_types:unencoded_content()). -endif. diff --git a/src/rabbit_binary_parser.erl b/src/rabbit_binary_parser.erl index a8879bea..69e34440 100644 --- a/src/rabbit_binary_parser.erl +++ b/src/rabbit_binary_parser.erl @@ -46,9 +46,9 @@ -spec(parse_properties/2 :: ([rabbit_framing:amqp_property_type()], binary()) -> [any()]). -spec(ensure_content_decoded/1 :: - (rabbit:content()) -> rabbit:decoded_content()). + (rabbit_types:content()) -> rabbit_types:decoded_content()). -spec(clear_decoded_content/1 :: - (rabbit:content()) -> rabbit:undecoded_content()). + (rabbit_types:content()) -> rabbit_types:undecoded_content()). -endif. diff --git a/src/rabbit_channel.erl b/src/rabbit_channel.erl index a0f09f4c..b5d4e2af 100644 --- a/src/rabbit_channel.erl +++ b/src/rabbit_channel.erl @@ -78,22 +78,22 @@ -spec(start_link/6 :: (channel_number(), pid(), pid(), rabbit_access_control:username(), - rabbit:vhost(), pid()) -> pid()). + rabbit_types:vhost(), pid()) -> pid()). -spec(do/2 :: (pid(), rabbit_framing:amqp_method_record()) -> 'ok'). -spec(do/3 :: (pid(), rabbit_framing:amqp_method_record(), - rabbit:maybe(rabbit:content())) -> 'ok'). + rabbit_types:maybe(rabbit_types:content())) -> 'ok'). -spec(shutdown/1 :: (pid()) -> 'ok'). -spec(send_command/2 :: (pid(), rabbit_framing:amqp_method()) -> 'ok'). --spec(deliver/4 ::(pid(), rabbit:ctag(), boolean(), rabbit_amqqueue:qmsg()) -> 'ok'). +-spec(deliver/4 ::(pid(), rabbit_types:ctag(), boolean(), rabbit_amqqueue:qmsg()) -> 'ok'). -spec(conserve_memory/2 :: (pid(), boolean()) -> 'ok'). -spec(flushed/2 :: (pid(), pid()) -> 'ok'). -spec(flow_timeout/2 :: (pid(), ref()) -> 'ok'). -spec(list/0 :: () -> [pid()]). --spec(info_keys/0 :: () -> [rabbit:info_key()]). --spec(info/1 :: (pid()) -> [rabbit:info()]). --spec(info/2 :: (pid(), [rabbit:info_key()]) -> [rabbit:info()]). --spec(info_all/0 :: () -> [[rabbit:info()]]). --spec(info_all/1 :: ([rabbit:info_key()]) -> [[rabbit:info()]]). +-spec(info_keys/0 :: () -> [rabbit_types:info_key()]). +-spec(info/1 :: (pid()) -> [rabbit_types:info()]). +-spec(info/2 :: (pid(), [rabbit_types:info_key()]) -> [rabbit_types:info()]). +-spec(info_all/0 :: () -> [[rabbit_types:info()]]). +-spec(info_all/1 :: ([rabbit_types:info_key()]) -> [[rabbit_types:info()]]). -endif. diff --git a/src/rabbit_exchange.erl b/src/rabbit_exchange.erl index de29ccb3..ae45f64a 100644 --- a/src/rabbit_exchange.erl +++ b/src/rabbit_exchange.erl @@ -90,14 +90,14 @@ -spec(lookup/1 :: (name()) -> {'ok', exchange()} | rabbit_misc:not_found()). -spec(lookup_or_die/1 :: (name()) -> exchange()). --spec(list/1 :: (rabbit:vhost()) -> [exchange()]). --spec(info_keys/0 :: () -> [rabbit:info_key()]). --spec(info/1 :: (exchange()) -> [rabbit:info()]). --spec(info/2 :: (exchange(), [rabbit:info_key()]) -> [rabbit:info()]). --spec(info_all/1 :: (rabbit:vhost()) -> [[rabbit:info()]]). --spec(info_all/2 :: (rabbit:vhost(), [rabbit:info_key()]) - -> [[rabbit:info()]]). --spec(publish/2 :: (exchange(), rabbit:delivery()) +-spec(list/1 :: (rabbit_types:vhost()) -> [exchange()]). +-spec(info_keys/0 :: () -> [rabbit_types:info_key()]). +-spec(info/1 :: (exchange()) -> [rabbit_types:info()]). +-spec(info/2 :: (exchange(), [rabbit_types:info_key()]) -> [rabbit_types:info()]). +-spec(info_all/1 :: (rabbit_types:vhost()) -> [[rabbit_types:info()]]). +-spec(info_all/2 :: (rabbit_types:vhost(), [rabbit_types:info_key()]) + -> [[rabbit_types:info()]]). +-spec(publish/2 :: (exchange(), rabbit_types:delivery()) -> {rabbit_router:routing_result(), [pid()]}). -spec(add_binding/5 :: (name(), rabbit_amqqueue:name(), rabbit_router:routing_key(), @@ -106,7 +106,7 @@ (name(), rabbit_amqqueue:name(), rabbit_router:routing_key(), rabbit_framing:amqp_table(), inner_fun()) -> bind_res() | {'error', 'binding_not_found'}). --spec(list_bindings/1 :: (rabbit:vhost()) -> +-spec(list_bindings/1 :: (rabbit_types:vhost()) -> [{name(), rabbit_amqqueue:name(), rabbit_router:routing_key(), rabbit_framing:amqp_table()}]). -spec(delete_queue_bindings/1 :: diff --git a/src/rabbit_misc.erl b/src/rabbit_misc.erl index 88a5e505..3d94d952 100644 --- a/src/rabbit_misc.erl +++ b/src/rabbit_misc.erl @@ -82,7 +82,7 @@ -type(not_found() :: {'error', 'not_found'}). -type(resource_name() :: binary()). -type(r(Kind) :: - #resource{virtual_host :: rabbit:vhost(), + #resource{virtual_host :: rabbit_types:vhost(), kind :: Kind, name :: resource_name()}). -type(thunk(T) :: fun(() -> T)). @@ -106,14 +106,14 @@ -spec(get_config/2 :: (atom(), A) -> A). -spec(set_config/2 :: (atom(), any()) -> 'ok'). -spec(dirty_read/1 :: ({atom(), any()}) -> {'ok', any()} | not_found()). --spec(r/3 :: (rabbit:vhost() | r(atom()), K, resource_name()) +-spec(r/3 :: (rabbit_types:vhost() | r(atom()), K, resource_name()) -> r(K) when is_subtype(K, atom())). --spec(r/2 :: (rabbit:vhost(), K) - -> #resource{virtual_host :: rabbit:vhost(), +-spec(r/2 :: (rabbit_types:vhost(), K) + -> #resource{virtual_host :: rabbit_types:vhost(), kind :: K, name :: '_'} when is_subtype(K, atom())). --spec(r_arg/4 :: (rabbit:vhost() | r(atom()), K, +-spec(r_arg/4 :: (rabbit_types:vhost() | r(atom()), K, rabbit_framing:amqp_table(), binary()) -> undefined | r(K) when is_subtype(K, atom())). -spec(rs/1 :: (r(atom())) -> string()). @@ -126,15 +126,15 @@ -spec(with_exit_handler/2 :: (thunk(A), thunk(A)) -> A). -spec(filter_exit_map/2 :: (fun ((A) -> B), [A]) -> [B]). -spec(with_user/2 :: (rabbit_access_control:username(), thunk(A)) -> A). --spec(with_vhost/2 :: (rabbit:vhost(), thunk(A)) -> A). +-spec(with_vhost/2 :: (rabbit_types:vhost(), thunk(A)) -> A). -spec(with_user_and_vhost/3 :: (rabbit_access_control:username(), - rabbit:vhost(), thunk(A)) -> A). + rabbit_types:vhost(), thunk(A)) -> A). -spec(execute_mnesia_transaction/1 :: (thunk(A)) -> A). -spec(ensure_ok/2 :: (ok_or_error(), atom()) -> 'ok'). -spec(makenode/1 :: ({string(), string()} | string()) -> node()). -spec(nodeparts/1 :: (node() | string()) -> {string(), string()}). -spec(cookie_hash/0 :: () -> string()). --spec(tcp_name/3 :: (atom(), inet:ip_address(), rabbit:ip_port()) -> atom()). +-spec(tcp_name/3 :: (atom(), inet:ip_address(), rabbit_networking:ip_port()) -> atom()). -spec(intersperse/2 :: (A, [A]) -> [A]). -spec(upmap/2 :: (fun ((A) -> B), [A]) -> [B]). -spec(map_in_order/2 :: (fun ((A) -> B), [A]) -> [B]). diff --git a/src/rabbit_net.erl b/src/rabbit_net.erl index 1892e498..5379d3a1 100644 --- a/src/rabbit_net.erl +++ b/src/rabbit_net.erl @@ -47,7 +47,7 @@ 'send_cnt' | 'send_max' | 'send_avg' | 'send_oct' | 'send_pend'). -type(error() :: {'error', any()}). -type(ssl_socket() :: #ssl_socket{}). --type(socket() :: rabbit:ip_port() | ssl_socket()). +-type(socket() :: rabbit_networking:ip_port() | ssl_socket()). -spec(async_recv/3 :: (socket(), integer(), timeout()) -> {'ok', any()}). -spec(close/1 :: (socket()) -> 'ok' | error()). @@ -55,9 +55,9 @@ -spec(port_command/2 :: (socket(), iolist()) -> 'true'). -spec(send/2 :: (socket(), binary() | iolist()) -> 'ok' | error()). -spec(peername/1 :: (socket()) -> - {'ok', {inet:ip_address(), rabbit:ip_port()}} | error()). + {'ok', {inet:ip_address(), rabbit_networking:ip_port()}} | error()). -spec(sockname/1 :: (socket()) -> - {'ok', {inet:ip_address(), rabbit:ip_port()}} | error()). + {'ok', {inet:ip_address(), rabbit_networking:ip_port()}} | error()). -spec(getstat/2 :: (socket(), [stat_option()]) -> {'ok', [{stat_option(), integer()}]} | error()). diff --git a/src/rabbit_networking.erl b/src/rabbit_networking.erl index 6213811c..d182810a 100644 --- a/src/rabbit_networking.erl +++ b/src/rabbit_networking.erl @@ -63,30 +63,32 @@ -ifdef(use_specs). +-export_type([ip_port/0, hostname/0]). + -type(connection() :: pid()). -type(listener() :: #listener{node :: node(), protocol :: atom(), - host :: rabbit:hostname(), - port :: rabbit:ip_port()}). + host :: hostname(), + port :: ip_port()}). -spec(start/0 :: () -> 'ok'). --spec(start_tcp_listener/2 :: (rabbit:hostname(), rabbit:ip_port()) -> 'ok'). --spec(start_ssl_listener/3 :: (rabbit:hostname(), rabbit:ip_port(), [rabbit:info()]) +-spec(start_tcp_listener/2 :: (hostname(), ip_port()) -> 'ok'). +-spec(start_ssl_listener/3 :: (hostname(), ip_port(), [rabbit_types:info()]) -> 'ok'). --spec(stop_tcp_listener/2 :: (rabbit:hostname(), rabbit:ip_port()) -> 'ok'). +-spec(stop_tcp_listener/2 :: (hostname(), ip_port()) -> 'ok'). -spec(active_listeners/0 :: () -> [listener()]). -spec(node_listeners/1 :: (node()) -> [listener()]). -spec(connections/0 :: () -> [connection()]). --spec(connection_info_keys/0 :: () -> [rabbit:info_key()]). --spec(connection_info/1 :: (connection()) -> [rabbit:info()]). --spec(connection_info/2 :: (connection(), [rabbit:info_key()]) -> [rabbit:info()]). --spec(connection_info_all/0 :: () -> [[rabbit:info()]]). --spec(connection_info_all/1 :: ([rabbit:info_key()]) -> [[rabbit:info()]]). +-spec(connection_info_keys/0 :: () -> [rabbit_types:info_key()]). +-spec(connection_info/1 :: (connection()) -> [rabbit_types:info()]). +-spec(connection_info/2 :: (connection(), [rabbit_types:info_key()]) -> [rabbit_types:info()]). +-spec(connection_info_all/0 :: () -> [[rabbit_types:info()]]). +-spec(connection_info_all/1 :: ([rabbit_types:info_key()]) -> [[rabbit_types:info()]]). -spec(close_connection/2 :: (pid(), string()) -> 'ok'). -spec(on_node_down/1 :: (node()) -> 'ok'). --spec(check_tcp_listener_address/3 :: (atom(), rabbit:hostname(), rabbit:ip_port()) -> +-spec(check_tcp_listener_address/3 :: (atom(), hostname(), ip_port()) -> {inet:ip_address(), atom()}). -endif. diff --git a/src/rabbit_persister.erl b/src/rabbit_persister.erl index 727fcd1b..ea290b37 100644 --- a/src/rabbit_persister.erl +++ b/src/rabbit_persister.erl @@ -69,19 +69,19 @@ -type(pmsg() :: {rabbit_amqqueue:name(), pkey()}). -type(work_item() :: - {publish, rabbit:message(), pmsg()} | + {publish, rabbit_types:message(), pmsg()} | {deliver, pmsg()} | {ack, pmsg()}). -spec(start_link/1 :: ([rabbit_amqqueue:name()]) -> {'ok', pid()} | 'ignore' | {'error', any()}). -spec(transaction/1 :: ([work_item()]) -> 'ok'). --spec(extend_transaction/2 :: ({rabbit:txn(), rabbit_amqqueue:name()}, [work_item()]) -> 'ok'). +-spec(extend_transaction/2 :: ({rabbit_types:txn(), rabbit_amqqueue:name()}, [work_item()]) -> 'ok'). -spec(dirty_work/1 :: ([work_item()]) -> 'ok'). --spec(commit_transaction/1 :: ({rabbit:txn(), rabbit_amqqueue:name()}) -> 'ok'). --spec(rollback_transaction/1 :: ({rabbit:txn(), rabbit_amqqueue:name()}) -> 'ok'). +-spec(commit_transaction/1 :: ({rabbit_types:txn(), rabbit_amqqueue:name()}) -> 'ok'). +-spec(rollback_transaction/1 :: ({rabbit_types:txn(), rabbit_amqqueue:name()}) -> 'ok'). -spec(force_snapshot/0 :: () -> 'ok'). --spec(queue_content/1 :: (rabbit_amqqueue:name()) -> [{rabbit:message(), boolean()}]). +-spec(queue_content/1 :: (rabbit_amqqueue:name()) -> [{rabbit_types:message(), boolean()}]). -endif. diff --git a/src/rabbit_reader.erl b/src/rabbit_reader.erl index 81798c5a..e355cd26 100644 --- a/src/rabbit_reader.erl +++ b/src/rabbit_reader.erl @@ -138,9 +138,9 @@ -ifdef(use_specs). --spec(info_keys/0 :: () -> [rabbit:info_key()]). --spec(info/1 :: (pid()) -> [rabbit:info()]). --spec(info/2 :: (pid(), [rabbit:info_key()]) -> [rabbit:info()]). +-spec(info_keys/0 :: () -> [rabbit_types:info_key()]). +-spec(info/1 :: (pid()) -> [rabbit_types:info()]). +-spec(info/2 :: (pid(), [rabbit_types:info_key()]) -> [rabbit_types:info()]). -spec(shutdown/2 :: (pid(), string()) -> 'ok'). -spec(server_properties/0 :: () -> rabbit_framing:amqp_table()). diff --git a/src/rabbit_router.erl b/src/rabbit_router.erl index eb5beb2a..bc9b3891 100644 --- a/src/rabbit_router.erl +++ b/src/rabbit_router.erl @@ -46,7 +46,7 @@ -type(routing_key() :: binary()). -type(routing_result() :: 'routed' | 'unroutable' | 'not_delivered'). --spec(deliver/2 :: ([pid()], rabbit:delivery()) -> {routing_result(), [pid()]}). +-spec(deliver/2 :: ([pid()], rabbit_types:delivery()) -> {routing_result(), [pid()]}). -endif. diff --git a/src/rabbit_types.erl b/src/rabbit_types.erl new file mode 100644 index 00000000..b8c3884e --- /dev/null +++ b/src/rabbit_types.erl @@ -0,0 +1,89 @@ +%% 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 Developers of the Original Code are LShift Ltd, +%% Cohesive Financial Technologies LLC, and Rabbit Technologies Ltd. +%% +%% Portions created before 22-Nov-2008 00:00:00 GMT by LShift Ltd, +%% Cohesive Financial Technologies LLC, or Rabbit Technologies Ltd +%% are Copyright (C) 2007-2008 LShift Ltd, Cohesive Financial +%% Technologies LLC, and Rabbit Technologies Ltd. +%% +%% Portions created by LShift Ltd are Copyright (C) 2007-2010 LShift +%% Ltd. Portions created by Cohesive Financial Technologies LLC are +%% Copyright (C) 2007-2010 Cohesive Financial Technologies +%% LLC. Portions created by Rabbit Technologies Ltd are Copyright +%% (C) 2007-2010 Rabbit Technologies Ltd. +%% +%% All Rights Reserved. +%% +%% Contributor(s): ______________________________________. +%% + +-module(rabbit_types). + +-include("rabbit.hrl"). + +-ifdef(use_specs). + +-export_type([txn/0, maybe/1, info/0, info_key/0, message/0, basic_message/0, + delivery/0, content/0, decoded_content/0, undecoded_content/0, + unencoded_content/0, encoded_content/0, vhost/0, ctag/0]). + +-type(maybe(T) :: T | 'none'). +-type(vhost() :: binary()). +-type(ctag() :: binary()). + +%% TODO: make this more precise by tying specific class_ids to +%% specific properties +-type(undecoded_content() :: + #content{class_id :: rabbit_framing:amqp_class_id(), + properties :: 'none', + properties_bin :: binary(), + payload_fragments_rev :: [binary()]} | + #content{class_id :: rabbit_framing:amqp_class_id(), + properties :: rabbit_framing:amqp_property_record(), + properties_bin :: 'none', + payload_fragments_rev :: [binary()]}). +-type(unencoded_content() :: undecoded_content()). +-type(decoded_content() :: + #content{class_id :: rabbit_framing:amqp_class_id(), + properties :: rabbit_framing:amqp_property_record(), + properties_bin :: maybe(binary()), + payload_fragments_rev :: [binary()]}). +-type(encoded_content() :: + #content{class_id :: rabbit_framing:amqp_class_id(), + properties :: maybe(rabbit_framing:amqp_property_record()), + properties_bin :: binary(), + payload_fragments_rev :: [binary()]}). +-type(content() :: undecoded_content() | decoded_content()). +-type(basic_message() :: + #basic_message{exchange_name :: rabbit_exchange:name(), + routing_key :: rabbit_router:routing_key(), + content :: content(), + guid :: rabbit_guid:guid(), + is_persistent :: boolean()}). +-type(message() :: basic_message()). +-type(delivery() :: + #delivery{mandatory :: boolean(), + immediate :: boolean(), + txn :: maybe(txn()), + sender :: pid(), + message :: message()}). + +%% this is really an abstract type, but dialyzer does not support them +-type(txn() :: rabbit_guid:guid()). + +-type(info_key() :: atom()). +-type(info() :: {info_key(), any()}). + +-endif. % use_specs diff --git a/src/rabbit_writer.erl b/src/rabbit_writer.erl index 7c826d98..2b3082bc 100644 --- a/src/rabbit_writer.erl +++ b/src/rabbit_writer.erl @@ -56,20 +56,20 @@ -> pid()). -spec(send_command/2 :: (pid(), rabbit_framing:amqp_method_record()) -> 'ok'). -spec(send_command/3 :: - (pid(), rabbit_framing:amqp_method_record(), rabbit:content()) -> 'ok'). + (pid(), rabbit_framing:amqp_method_record(), rabbit_types:content()) -> 'ok'). -spec(send_command_and_signal_back/3 :: (pid(), rabbit_framing:amqp_method(), pid()) -> 'ok'). -spec(send_command_and_signal_back/4 :: - (pid(), rabbit_framing:amqp_method(), rabbit:content(), pid()) -> 'ok'). + (pid(), rabbit_framing:amqp_method(), rabbit_types:content(), pid()) -> 'ok'). -spec(send_command_and_notify/5 :: - (pid(), pid(), pid(), rabbit_framing:amqp_method_record(), rabbit:content()) + (pid(), pid(), pid(), rabbit_framing:amqp_method_record(), rabbit_types:content()) -> 'ok'). -spec(internal_send_command/3 :: (rabbit_net:socket(), rabbit_channel:channel_number(), rabbit_framing:amqp_method_record()) -> 'ok'). -spec(internal_send_command/5 :: (rabbit_net:socket(), rabbit_channel:channel_number(), rabbit_framing:amqp_method_record(), - rabbit:content(), non_neg_integer()) -> 'ok'). + rabbit_types:content(), non_neg_integer()) -> 'ok'). -endif. -- cgit v1.2.1 From ca6fdad91d83f02cb4b7ade6562541dce5c363cd Mon Sep 17 00:00:00 2001 From: Alexandru Scvortov Date: Tue, 6 Jul 2010 10:19:21 +0100 Subject: moved all rabbit.hrl types to rabbit_types.erl --- include/rabbit_exchange_type_spec.hrl | 24 +++++++-------- src/rabbit_access_control.erl | 15 ++++------ src/rabbit_amqqueue.erl | 55 +++++++++++++++-------------------- src/rabbit_basic.erl | 2 +- src/rabbit_exchange.erl | 39 +++++++++---------------- src/rabbit_misc.erl | 29 +++++++----------- src/rabbit_net.erl | 5 +--- src/rabbit_networking.erl | 18 ++++-------- src/rabbit_reader_queue_collector.erl | 2 +- src/rabbit_types.erl | 49 ++++++++++++++++++++++++++++++- 10 files changed, 122 insertions(+), 116 deletions(-) diff --git a/include/rabbit_exchange_type_spec.hrl b/include/rabbit_exchange_type_spec.hrl index 5a010c0d..f05bcb84 100644 --- a/include/rabbit_exchange_type_spec.hrl +++ b/include/rabbit_exchange_type_spec.hrl @@ -31,19 +31,19 @@ -ifdef(use_specs). -spec(description/0 :: () -> [{atom(), any()}]). --spec(publish/2 :: (rabbit_exchange:exchange(), rabbit_types:delivery()) +-spec(publish/2 :: (rabbit_types:exchange(), rabbit_types:delivery()) -> {rabbit_router:routing_result(), [pid()]}). --spec(validate/1 :: (rabbit_exchange:exchange()) -> 'ok'). --spec(create/1 :: (rabbit_exchange:exchange()) -> 'ok'). --spec(recover/2 :: (rabbit_exchange:exchange(), - [rabbit_exchange:binding()]) -> 'ok'). --spec(delete/2 :: (rabbit_exchange:exchange(), - [rabbit_exchange:binding()]) -> 'ok'). --spec(add_binding/2 :: (rabbit_exchange:exchange(), - rabbit_exchange:binding()) -> 'ok'). --spec(remove_bindings/2 :: (rabbit_exchange:exchange(), - [rabbit_exchange:binding()]) -> 'ok'). --spec(assert_args_equivalence/2 :: (rabbit_exchange:exchange(), +-spec(validate/1 :: (rabbit_types:exchange()) -> 'ok'). +-spec(create/1 :: (rabbit_types:exchange()) -> 'ok'). +-spec(recover/2 :: (rabbit_types:exchange(), + [rabbit_types:binding()]) -> 'ok'). +-spec(delete/2 :: (rabbit_types:exchange(), + [rabbit_types:binding()]) -> 'ok'). +-spec(add_binding/2 :: (rabbit_types:exchange(), + rabbit_types:binding()) -> 'ok'). +-spec(remove_bindings/2 :: (rabbit_types:exchange(), + [rabbit_types:binding()]) -> 'ok'). +-spec(assert_args_equivalence/2 :: (rabbit_types:exchange(), rabbit_framing:amqp_table()) -> 'ok'). -endif. diff --git a/src/rabbit_access_control.erl b/src/rabbit_access_control.erl index 973851a4..6f1b3340 100644 --- a/src/rabbit_access_control.erl +++ b/src/rabbit_access_control.erl @@ -45,27 +45,24 @@ -ifdef(use_specs). --export_type([username/0]). +-export_type([username/0, password/0]). -type(permission_atom() :: 'configure' | 'read' | 'write'). -type(username() :: binary()). -type(password() :: binary()). --type(user() :: - #user{username :: username(), - password :: password()}). -type(regexp() :: binary()). --spec(check_login/2 :: (binary(), binary()) -> user()). --spec(user_pass_login/2 :: (username(), password()) -> user()). --spec(check_vhost_access/2 :: (user(), rabbit_types:vhost()) -> 'ok'). +-spec(check_login/2 :: (binary(), binary()) -> rabbit_types:user()). +-spec(user_pass_login/2 :: (username(), password()) -> rabbit_types:user()). +-spec(check_vhost_access/2 :: (rabbit_types:user(), rabbit_types:vhost()) -> 'ok'). -spec(check_resource_access/3 :: - (username(), rabbit_misc:r(atom()), permission_atom()) -> 'ok'). + (username(), rabbit_misc:types(atom()), permission_atom()) -> 'ok'). -spec(add_user/2 :: (username(), password()) -> 'ok'). -spec(delete_user/1 :: (username()) -> 'ok'). -spec(change_password/2 :: (username(), password()) -> 'ok'). -spec(list_users/0 :: () -> [username()]). -spec(lookup_user/1 :: (username()) -> - {'ok', user()} | rabbit_misc:not_found()). + {'ok', rabbit_types:user()} | rabbit_types:not_found()). -spec(add_vhost/1 :: (rabbit_types:vhost()) -> 'ok'). -spec(delete_vhost/1 :: (rabbit_types:vhost()) -> 'ok'). -spec(list_vhosts/0 :: () -> [rabbit_types:vhost()]). diff --git a/src/rabbit_amqqueue.erl b/src/rabbit_amqqueue.erl index 9e271c8e..b23058a6 100644 --- a/src/rabbit_amqqueue.erl +++ b/src/rabbit_amqqueue.erl @@ -59,19 +59,12 @@ -ifdef(use_specs). --export_type([amqqueue/0, name/0, qmsg/0]). +-export_type([name/0, qmsg/0]). --type(name() :: rabbit_misc:r('queue')). --type(amqqueue() :: - #amqqueue{name :: name(), - durable :: boolean(), - auto_delete :: boolean(), - exclusive_owner :: rabbit_types:maybe(pid()), - arguments :: rabbit_framing:amqp_table(), - pid :: rabbit_types:maybe(pid())}). +-type(name() :: rabbit_types:r('queue')). -type(qlen() :: {'ok', non_neg_integer()}). --type(qfun(A) :: fun ((amqqueue()) -> A)). +-type(qfun(A) :: fun ((rabbit_types:amqqueue()) -> A)). -type(qmsg() :: {name(), pid(), msg_id(), boolean(), rabbit_types:message()}). -type(msg_id() :: non_neg_integer()). -type(ok_or_errors() :: @@ -79,35 +72,35 @@ -spec(start/0 :: () -> 'ok'). -spec(declare/5 :: (name(), boolean(), boolean(), rabbit_framing:amqp_table(), - rabbit_types:maybe(pid())) -> {'new' | 'existing', amqqueue()}). --spec(lookup/1 :: (name()) -> {'ok', amqqueue()} | rabbit_misc:not_found()). --spec(with/2 :: (name(), qfun(A)) -> A | rabbit_misc:not_found()). + rabbit_types:maybe(pid())) -> {'new' | 'existing', rabbit_types:amqqueue()}). +-spec(lookup/1 :: (name()) -> {'ok', rabbit_types:amqqueue()} | rabbit_types:not_found()). +-spec(with/2 :: (name(), qfun(A)) -> A | rabbit_types:not_found()). -spec(with_or_die/2 :: (name(), qfun(A)) -> A). --spec(assert_equivalence/5 :: (amqqueue(), boolean(), boolean(), +-spec(assert_equivalence/5 :: (rabbit_types:amqqueue(), boolean(), boolean(), rabbit_framing:amqp_table(), rabbit_types:maybe(pid)) -> ok). --spec(check_exclusive_access/2 :: (amqqueue(), pid()) -> 'ok'). +-spec(check_exclusive_access/2 :: (rabbit_types:amqqueue(), pid()) -> 'ok'). -spec(with_exclusive_access_or_die/3 :: (name(), pid(), qfun(A)) -> A). --spec(list/1 :: (rabbit_types:vhost()) -> [amqqueue()]). +-spec(list/1 :: (rabbit_types:vhost()) -> [rabbit_types:amqqueue()]). -spec(info_keys/0 :: () -> [rabbit_types:info_key()]). --spec(info/1 :: (amqqueue()) -> [rabbit_types:info()]). --spec(info/2 :: (amqqueue(), [rabbit_types:info_key()]) -> [rabbit_types:info()]). +-spec(info/1 :: (rabbit_types:amqqueue()) -> [rabbit_types:info()]). +-spec(info/2 :: (rabbit_types:amqqueue(), [rabbit_types:info_key()]) -> [rabbit_types:info()]). -spec(info_all/1 :: (rabbit_types:vhost()) -> [[rabbit_types:info()]]). -spec(info_all/2 :: (rabbit_types:vhost(), [rabbit_types:info_key()]) -> [[rabbit_types:info()]]). --spec(consumers/1 :: (amqqueue()) -> [{pid(), rabbit_types:ctag(), boolean()}]). +-spec(consumers/1 :: (rabbit_types:amqqueue()) -> [{pid(), rabbit_types:ctag(), boolean()}]). -spec(consumers_all/1 :: (rabbit_types:vhost()) -> [{name(), pid(), rabbit_types:ctag(), boolean()}]). -spec(stat/1 :: - (amqqueue()) -> {'ok', non_neg_integer(), non_neg_integer()}). + (rabbit_types:amqqueue()) -> {'ok', non_neg_integer(), non_neg_integer()}). -spec(delete/3 :: - (amqqueue(), 'false', 'false') -> qlen(); - (amqqueue(), 'true' , 'false') -> qlen() | {'error', 'in_use'}; - (amqqueue(), 'false', 'true' ) -> qlen() | {'error', 'not_empty'}; - (amqqueue(), 'true' , 'true' ) -> qlen() | + (rabbit_types:amqqueue(), 'false', 'false') -> qlen(); + (rabbit_types:amqqueue(), 'true' , 'false') -> qlen() | {'error', 'in_use'}; + (rabbit_types:amqqueue(), 'false', 'true' ) -> qlen() | {'error', 'not_empty'}; + (rabbit_types:amqqueue(), 'true' , 'true' ) -> qlen() | {'error', 'in_use'} | {'error', 'not_empty'}). --spec(purge/1 :: (amqqueue()) -> qlen()). +-spec(purge/1 :: (rabbit_types:amqqueue()) -> qlen()). -spec(deliver/2 :: (pid(), rabbit_types:delivery()) -> boolean()). -spec(requeue/3 :: (pid(), [msg_id()], pid()) -> 'ok'). -spec(ack/4 :: (pid(), rabbit_types:maybe(rabbit_types:txn()), [msg_id()], pid()) @@ -116,24 +109,24 @@ -spec(rollback_all/3 :: ([pid()], rabbit_types:txn(), pid()) -> 'ok'). -spec(notify_down_all/2 :: ([pid()], pid()) -> ok_or_errors()). -spec(limit_all/3 :: ([pid()], pid(), pid() | 'undefined') -> ok_or_errors()). --spec(basic_get/3 :: (amqqueue(), pid(), boolean()) -> +-spec(basic_get/3 :: (rabbit_types:amqqueue(), pid(), boolean()) -> {'ok', non_neg_integer(), qmsg()} | 'empty'). -spec(basic_consume/7 :: - (amqqueue(), boolean(), pid(), pid() | 'undefined', + (rabbit_types:amqqueue(), boolean(), pid(), pid() | 'undefined', rabbit_types:ctag(), boolean(), any()) -> 'ok' | {'error', 'exclusive_consume_unavailable'}). --spec(basic_cancel/4 :: (amqqueue(), pid(), rabbit_types:ctag(), any()) -> 'ok'). +-spec(basic_cancel/4 :: (rabbit_types:amqqueue(), pid(), rabbit_types:ctag(), any()) -> 'ok'). -spec(notify_sent/2 :: (pid(), pid()) -> 'ok'). -spec(unblock/2 :: (pid(), pid()) -> 'ok'). -spec(flush_all/2 :: ([pid()], pid()) -> 'ok'). --spec(internal_declare/2 :: (amqqueue(), boolean()) -> amqqueue() | 'not_found'). --spec(internal_delete/1 :: (name()) -> 'ok' | rabbit_misc:not_found()). +-spec(internal_declare/2 :: (rabbit_types:amqqueue(), boolean()) -> rabbit_types:amqqueue() | 'not_found'). +-spec(internal_delete/1 :: (name()) -> 'ok' | rabbit_types:not_found()). -spec(maybe_run_queue_via_backing_queue/2 :: (pid(), (fun ((A) -> A))) -> 'ok'). -spec(update_ram_duration/1 :: (pid()) -> 'ok'). -spec(set_ram_duration_target/2 :: (pid(), number() | 'infinity') -> 'ok'). -spec(set_maximum_since_use/2 :: (pid(), non_neg_integer()) -> 'ok'). -spec(on_node_down/1 :: (node()) -> 'ok'). --spec(pseudo_queue/2 :: (binary(), pid()) -> amqqueue()). +-spec(pseudo_queue/2 :: (binary(), pid()) -> rabbit_types:amqqueue()). -endif. diff --git a/src/rabbit_basic.erl b/src/rabbit_basic.erl index b4e685b2..76153010 100644 --- a/src/rabbit_basic.erl +++ b/src/rabbit_basic.erl @@ -44,7 +44,7 @@ -type(properties_input() :: (rabbit_framing:amqp_property_record() | [{atom(), any()}])). -type(publish_result() :: ({ok, rabbit_router:routing_result(), [pid()]} - | rabbit_misc:not_found())). + | rabbit_types:not_found())). -spec(publish/1 :: (rabbit_types:delivery()) -> publish_result()). -spec(delivery/4 :: (boolean(), boolean(), rabbit_types:maybe(rabbit_types:txn()), diff --git a/src/rabbit_exchange.erl b/src/rabbit_exchange.erl index ae45f64a..b63fd876 100644 --- a/src/rabbit_exchange.erl +++ b/src/rabbit_exchange.erl @@ -56,48 +56,37 @@ -ifdef(use_specs). --export_type([name/0, exchange/0, binding/0]). - --type(name() :: rabbit_misc:r('exchange')). --type(exchange() :: - #exchange{name :: name(), - type :: type(), - durable :: boolean(), - auto_delete :: boolean(), - arguments :: rabbit_framing:amqp_table()}). +-export_type([name/0, type/0, binding_key/0]). + +-type(name() :: rabbit_types:r('exchange')). -type(type() :: atom()). -type(binding_key() :: binary()). --type(binding() :: - #binding{exchange_name :: name(), - queue_name :: rabbit_amqqueue:name(), - key :: binding_key()}). - -type(bind_res() :: 'ok' | {'error', 'queue_not_found' | 'exchange_not_found' | 'exchange_and_queue_not_found'}). --type(inner_fun() :: fun((exchange(), queue()) -> any())). +-type(inner_fun() :: fun((rabbit_types:exchange(), queue()) -> any())). -spec(recover/0 :: () -> 'ok'). -spec(declare/5 :: (name(), type(), boolean(), boolean(), - rabbit_framing:amqp_table()) -> exchange()). + rabbit_framing:amqp_table()) -> rabbit_types:exchange()). -spec(check_type/1 :: (binary()) -> atom()). --spec(assert_equivalence/5 :: (exchange(), atom(), boolean(), boolean(), +-spec(assert_equivalence/5 :: (rabbit_types:exchange(), atom(), boolean(), boolean(), rabbit_framing:amqp_table()) -> 'ok'). -spec(assert_args_equivalence/2 :: - (exchange(), rabbit_framing:amqp_table()) -> 'ok'). + (rabbit_types:exchange(), rabbit_framing:amqp_table()) -> 'ok'). -spec(lookup/1 :: (name()) - -> {'ok', exchange()} | rabbit_misc:not_found()). --spec(lookup_or_die/1 :: (name()) -> exchange()). --spec(list/1 :: (rabbit_types:vhost()) -> [exchange()]). + -> {'ok', rabbit_types:exchange()} | rabbit_types:not_found()). +-spec(lookup_or_die/1 :: (name()) -> rabbit_types:exchange()). +-spec(list/1 :: (rabbit_types:vhost()) -> [rabbit_types:exchange()]). -spec(info_keys/0 :: () -> [rabbit_types:info_key()]). --spec(info/1 :: (exchange()) -> [rabbit_types:info()]). --spec(info/2 :: (exchange(), [rabbit_types:info_key()]) -> [rabbit_types:info()]). +-spec(info/1 :: (rabbit_types:exchange()) -> [rabbit_types:info()]). +-spec(info/2 :: (rabbit_types:exchange(), [rabbit_types:info_key()]) -> [rabbit_types:info()]). -spec(info_all/1 :: (rabbit_types:vhost()) -> [[rabbit_types:info()]]). -spec(info_all/2 :: (rabbit_types:vhost(), [rabbit_types:info_key()]) -> [[rabbit_types:info()]]). --spec(publish/2 :: (exchange(), rabbit_types:delivery()) +-spec(publish/2 :: (rabbit_types:exchange(), rabbit_types:delivery()) -> {rabbit_router:routing_result(), [pid()]}). -spec(add_binding/5 :: (name(), rabbit_amqqueue:name(), rabbit_router:routing_key(), @@ -114,7 +103,7 @@ -spec(delete_transient_queue_bindings/1 :: (rabbit_amqqueue:name()) -> fun (() -> none())). -spec(delete/2 :: (name(), boolean()) -> - 'ok' | rabbit_misc:not_found() | {'error', 'in_use'}). + 'ok' | rabbit_types:not_found() | {'error', 'in_use'}). -spec(list_queue_bindings/1 :: (rabbit_amqqueue:name()) -> [{name(), rabbit_router:routing_key(), rabbit_framing:amqp_table()}]). diff --git a/src/rabbit_misc.erl b/src/rabbit_misc.erl index 3d94d952..67150563 100644 --- a/src/rabbit_misc.erl +++ b/src/rabbit_misc.erl @@ -72,19 +72,10 @@ -ifdef(use_specs). --export_type([not_found/0, amqp_error/0, r/1]). +-export_type([resource_name/0]). -type(ok_or_error() :: 'ok' | {'error', any()}). --type(amqp_error() :: - #amqp_error{name :: rabbit_framing:amqp_exception(), - explanation :: string(), - method :: rabbit_framing:amqp_method_name()}). --type(not_found() :: {'error', 'not_found'}). -type(resource_name() :: binary()). --type(r(Kind) :: - #resource{virtual_host :: rabbit_types:vhost(), - kind :: Kind, - name :: resource_name()}). -type(thunk(T) :: fun(() -> T)). -spec(method_record_type/1 :: (rabbit_framing:amqp_method_record()) @@ -96,27 +87,27 @@ -> no_return()). -spec(amqp_error/4 :: (rabbit_framing:amqp_exception(), string(), [any()], - rabbit_framing:amqp_method_name()) -> rabbit_misc:amqp_error()). + rabbit_framing:amqp_method_name()) -> rabbit_types:amqp_error()). -spec(protocol_error/3 :: (rabbit_framing:amqp_exception(), string(), [any()]) -> no_return()). -spec(protocol_error/4 :: (rabbit_framing:amqp_exception(), string(), [any()], rabbit_framing:amqp_method_name()) -> no_return()). --spec(not_found/1 :: (r(atom())) -> no_return()). --spec(get_config/1 :: (atom()) -> {'ok', any()} | not_found()). +-spec(not_found/1 :: (rabbit_types:r(atom())) -> no_return()). +-spec(get_config/1 :: (atom()) -> {'ok', any()} | rabbit_types:not_found()). -spec(get_config/2 :: (atom(), A) -> A). -spec(set_config/2 :: (atom(), any()) -> 'ok'). --spec(dirty_read/1 :: ({atom(), any()}) -> {'ok', any()} | not_found()). --spec(r/3 :: (rabbit_types:vhost() | r(atom()), K, resource_name()) - -> r(K) when is_subtype(K, atom())). +-spec(dirty_read/1 :: ({atom(), any()}) -> {'ok', any()} | rabbit_types:not_found()). +-spec(r/3 :: (rabbit_types:vhost() | rabbit_types:r(atom()), K, resource_name()) + -> rabbit_types:r(K) when is_subtype(K, atom())). -spec(r/2 :: (rabbit_types:vhost(), K) -> #resource{virtual_host :: rabbit_types:vhost(), kind :: K, name :: '_'} when is_subtype(K, atom())). --spec(r_arg/4 :: (rabbit_types:vhost() | r(atom()), K, +-spec(r_arg/4 :: (rabbit_types:vhost() | rabbit_types:r(atom()), K, rabbit_framing:amqp_table(), binary()) - -> undefined | r(K) when is_subtype(K, atom())). --spec(rs/1 :: (r(atom())) -> string()). + -> undefined | rabbit_types:r(K) when is_subtype(K, atom())). +-spec(rs/1 :: (rabbit_types:r(atom())) -> string()). -spec(enable_cover/0 :: () -> ok_or_error()). -spec(start_cover/1 :: ([{string(), string()} | string()]) -> 'ok'). -spec(report_cover/0 :: () -> 'ok'). diff --git a/src/rabbit_net.erl b/src/rabbit_net.erl index 5379d3a1..8848ea87 100644 --- a/src/rabbit_net.erl +++ b/src/rabbit_net.erl @@ -40,14 +40,11 @@ -ifdef(use_specs). --export_type([socket/0]). - -type(stat_option() :: 'recv_cnt' | 'recv_max' | 'recv_avg' | 'recv_oct' | 'recv_dvi' | 'send_cnt' | 'send_max' | 'send_avg' | 'send_oct' | 'send_pend'). -type(error() :: {'error', any()}). --type(ssl_socket() :: #ssl_socket{}). --type(socket() :: rabbit_networking:ip_port() | ssl_socket()). +-type(socket() :: rabbit_networking:ip_port() | rabbit_types:ssl_socket()). -spec(async_recv/3 :: (socket(), integer(), timeout()) -> {'ok', any()}). -spec(close/1 :: (socket()) -> 'ok' | error()). diff --git a/src/rabbit_networking.erl b/src/rabbit_networking.erl index d182810a..938da9b5 100644 --- a/src/rabbit_networking.erl +++ b/src/rabbit_networking.erl @@ -65,25 +65,17 @@ -export_type([ip_port/0, hostname/0]). --type(connection() :: pid()). - --type(listener() :: - #listener{node :: node(), - protocol :: atom(), - host :: hostname(), - port :: ip_port()}). - -spec(start/0 :: () -> 'ok'). -spec(start_tcp_listener/2 :: (hostname(), ip_port()) -> 'ok'). -spec(start_ssl_listener/3 :: (hostname(), ip_port(), [rabbit_types:info()]) -> 'ok'). -spec(stop_tcp_listener/2 :: (hostname(), ip_port()) -> 'ok'). --spec(active_listeners/0 :: () -> [listener()]). --spec(node_listeners/1 :: (node()) -> [listener()]). --spec(connections/0 :: () -> [connection()]). +-spec(active_listeners/0 :: () -> [rabbit_types:listener()]). +-spec(node_listeners/1 :: (node()) -> [rabbit_types:listener()]). +-spec(connections/0 :: () -> [rabbit_types:connection()]). -spec(connection_info_keys/0 :: () -> [rabbit_types:info_key()]). --spec(connection_info/1 :: (connection()) -> [rabbit_types:info()]). --spec(connection_info/2 :: (connection(), [rabbit_types:info_key()]) -> [rabbit_types:info()]). +-spec(connection_info/1 :: (rabbit_types:connection()) -> [rabbit_types:info()]). +-spec(connection_info/2 :: (rabbit_types:connection(), [rabbit_types:info_key()]) -> [rabbit_types:info()]). -spec(connection_info_all/0 :: () -> [[rabbit_types:info()]]). -spec(connection_info_all/1 :: ([rabbit_types:info_key()]) -> [[rabbit_types:info()]]). -spec(close_connection/2 :: (pid(), string()) -> 'ok'). diff --git a/src/rabbit_reader_queue_collector.erl b/src/rabbit_reader_queue_collector.erl index 01eae523..e0919cd5 100644 --- a/src/rabbit_reader_queue_collector.erl +++ b/src/rabbit_reader_queue_collector.erl @@ -47,7 +47,7 @@ -ifdef(use_specs). -spec(start_link/0 :: () -> {'ok', pid()}). --spec(register_exclusive_queue/2 :: (pid(), rabbit_amqqueue:amqqueue()) -> 'ok'). +-spec(register_exclusive_queue/2 :: (pid(), rabbit_types:amqqueue()) -> 'ok'). -spec(delete_all/1 :: (pid()) -> 'ok'). -endif. diff --git a/src/rabbit_types.erl b/src/rabbit_types.erl index b8c3884e..22f9f8d7 100644 --- a/src/rabbit_types.erl +++ b/src/rabbit_types.erl @@ -37,7 +37,9 @@ -export_type([txn/0, maybe/1, info/0, info_key/0, message/0, basic_message/0, delivery/0, content/0, decoded_content/0, undecoded_content/0, - unencoded_content/0, encoded_content/0, vhost/0, ctag/0]). + unencoded_content/0, encoded_content/0, vhost/0, ctag/0, amqp_error/0, + not_found/0, r/1, ssl_socket/0, listener/0, binding/0, amqqueue/0, + exchange/0, connection/0, user/0]). -type(maybe(T) :: T | 'none'). -type(vhost() :: binary()). @@ -86,4 +88,49 @@ -type(info_key() :: atom()). -type(info() :: {info_key(), any()}). +-type(amqp_error() :: + #amqp_error{name :: rabbit_framing:amqp_exception(), + explanation :: string(), + method :: rabbit_framing:amqp_method_name()}). +-type(not_found() :: {'error', 'not_found'}). + +-type(r(Kind) :: + #resource{virtual_host :: rabbit_types:vhost(), + kind :: Kind, + name :: rabbit_misc:resource_name()}). + +-type(ssl_socket() :: #ssl_socket{}). + +-type(listener() :: + #listener{node :: node(), + protocol :: atom(), + host :: rabbit_net:hostname(), + port :: rabbit_net:ip_port()}). + +-type(binding() :: + #binding{exchange_name :: rabbit_exchange:name(), + queue_name :: rabbit_amqqueue:name(), + key :: rabbit_exchange:binding_key()}). + +-type(amqqueue() :: + #amqqueue{name :: rabbit_amqqueue:name(), + durable :: boolean(), + auto_delete :: boolean(), + exclusive_owner :: rabbit_types:maybe(pid()), + arguments :: rabbit_framing:amqp_table(), + pid :: rabbit_types:maybe(pid())}). + +-type(exchange() :: + #exchange{name :: rabbit_exchange:name(), + type :: rabbit_exchange:type(), + durable :: boolean(), + auto_delete :: boolean(), + arguments :: rabbit_framing:amqp_table()}). + +-type(connection() :: pid()). + +-type(user() :: + #user{username :: rabbit_access_control:username(), + password :: rabbit_access_control:password()}). + -endif. % use_specs -- cgit v1.2.1 From fc87714e04dd900355cc68c72ad6d7b854838245 Mon Sep 17 00:00:00 2001 From: Alexandru Scvortov Date: Tue, 6 Jul 2010 10:50:28 +0100 Subject: {error, A} -> rabbit_types:error(A) --- src/delegate_sup.erl | 2 +- src/file_handle_cache.erl | 2 +- src/pg_local.erl | 4 ++-- src/rabbit.erl | 2 +- src/rabbit_access_control.erl | 2 +- src/rabbit_amqqueue.erl | 16 ++++++++-------- src/rabbit_basic.erl | 4 ++-- src/rabbit_exchange.erl | 13 ++++++------- src/rabbit_exchange_type_registry.erl | 6 +++--- src/rabbit_guid.erl | 2 +- src/rabbit_log.erl | 2 +- src/rabbit_memory_monitor.erl | 2 +- src/rabbit_misc.erl | 10 +++++----- src/rabbit_net.erl | 2 +- src/rabbit_persister.erl | 2 +- src/rabbit_types.erl | 8 ++++---- src/vm_memory_monitor.erl | 2 +- src/worker_pool.erl | 2 +- src/worker_pool_sup.erl | 4 ++-- src/worker_pool_worker.erl | 2 +- 20 files changed, 44 insertions(+), 45 deletions(-) diff --git a/src/delegate_sup.erl b/src/delegate_sup.erl index 1c1d62a9..78368090 100644 --- a/src/delegate_sup.erl +++ b/src/delegate_sup.erl @@ -43,7 +43,7 @@ -ifdef(use_specs). --spec(start_link/0 :: () -> {'ok', pid()} | 'ignore' | {'error', any()}). +-spec(start_link/0 :: () -> {'ok', pid()} | 'ignore' | rabbit_types:error(any())). -endif. diff --git a/src/file_handle_cache.erl b/src/file_handle_cache.erl index 0f648dcd..888aed1f 100644 --- a/src/file_handle_cache.erl +++ b/src/file_handle_cache.erl @@ -182,7 +182,7 @@ -ifdef(use_specs). -type(ref() :: any()). --type(error() :: {'error', any()}). +-type(error() :: rabbit_types:error(any())). -type(ok_or_error() :: ('ok' | error())). -type(val_or_error(T) :: ({'ok', T} | error())). -type(position() :: ('bof' | 'eof' | non_neg_integer() | diff --git a/src/pg_local.erl b/src/pg_local.erl index 1501331d..4f22fb34 100644 --- a/src/pg_local.erl +++ b/src/pg_local.erl @@ -45,8 +45,8 @@ -type(name() :: term()). --spec(start_link/0 :: () -> {'ok', pid()} | {'error', term()}). --spec(start/0 :: () -> {'ok', pid()} | {'error', term()}). +-spec(start_link/0 :: () -> {'ok', pid()} | rabbit_types:error(term())). +-spec(start/0 :: () -> {'ok', pid()} | rabbit_types:error(term())). -spec(join/2 :: (name(), pid()) -> 'ok'). -spec(leave/2 :: (name(), pid()) -> 'ok'). -spec(get_members/1 :: (name()) -> [pid()]). diff --git a/src/rabbit.erl b/src/rabbit.erl index 3ebbd072..df466274 100644 --- a/src/rabbit.erl +++ b/src/rabbit.erl @@ -191,7 +191,7 @@ -spec(start/0 :: () -> 'ok'). -spec(stop/0 :: () -> 'ok'). -spec(stop_and_halt/0 :: () -> 'ok'). --spec(rotate_logs/1 :: (file_suffix()) -> 'ok' | {'error', any()}). +-spec(rotate_logs/1 :: (file_suffix()) -> 'ok' | rabbit_types:error(any())). -spec(status/0 :: () -> [{running_applications, [{atom(), string(), string()}]} | {nodes, [{rabbit_mnesia:node_type(), [node()]}]} | diff --git a/src/rabbit_access_control.erl b/src/rabbit_access_control.erl index 6f1b3340..20415fd0 100644 --- a/src/rabbit_access_control.erl +++ b/src/rabbit_access_control.erl @@ -62,7 +62,7 @@ -spec(change_password/2 :: (username(), password()) -> 'ok'). -spec(list_users/0 :: () -> [username()]). -spec(lookup_user/1 :: (username()) -> - {'ok', rabbit_types:user()} | rabbit_types:not_found()). + {'ok', rabbit_types:user()} | rabbit_types:error('not_found')). -spec(add_vhost/1 :: (rabbit_types:vhost()) -> 'ok'). -spec(delete_vhost/1 :: (rabbit_types:vhost()) -> 'ok'). -spec(list_vhosts/0 :: () -> [rabbit_types:vhost()]). diff --git a/src/rabbit_amqqueue.erl b/src/rabbit_amqqueue.erl index b23058a6..fa7ceda6 100644 --- a/src/rabbit_amqqueue.erl +++ b/src/rabbit_amqqueue.erl @@ -73,8 +73,8 @@ -spec(start/0 :: () -> 'ok'). -spec(declare/5 :: (name(), boolean(), boolean(), rabbit_framing:amqp_table(), rabbit_types:maybe(pid())) -> {'new' | 'existing', rabbit_types:amqqueue()}). --spec(lookup/1 :: (name()) -> {'ok', rabbit_types:amqqueue()} | rabbit_types:not_found()). --spec(with/2 :: (name(), qfun(A)) -> A | rabbit_types:not_found()). +-spec(lookup/1 :: (name()) -> {'ok', rabbit_types:amqqueue()} | rabbit_types:error('not_found')). +-spec(with/2 :: (name(), qfun(A)) -> A | rabbit_types:error('not_found')). -spec(with_or_die/2 :: (name(), qfun(A)) -> A). -spec(assert_equivalence/5 :: (rabbit_types:amqqueue(), boolean(), boolean(), rabbit_framing:amqp_table(), rabbit_types:maybe(pid)) @@ -95,11 +95,11 @@ (rabbit_types:amqqueue()) -> {'ok', non_neg_integer(), non_neg_integer()}). -spec(delete/3 :: (rabbit_types:amqqueue(), 'false', 'false') -> qlen(); - (rabbit_types:amqqueue(), 'true' , 'false') -> qlen() | {'error', 'in_use'}; - (rabbit_types:amqqueue(), 'false', 'true' ) -> qlen() | {'error', 'not_empty'}; + (rabbit_types:amqqueue(), 'true' , 'false') -> qlen() | rabbit_types:error('in_use'); + (rabbit_types:amqqueue(), 'false', 'true' ) -> qlen() | rabbit_types:error('not_empty'); (rabbit_types:amqqueue(), 'true' , 'true' ) -> qlen() | - {'error', 'in_use'} | - {'error', 'not_empty'}). + rabbit_types:error('in_use') | + rabbit_types:error('not_empty')). -spec(purge/1 :: (rabbit_types:amqqueue()) -> qlen()). -spec(deliver/2 :: (pid(), rabbit_types:delivery()) -> boolean()). -spec(requeue/3 :: (pid(), [msg_id()], pid()) -> 'ok'). @@ -114,13 +114,13 @@ -spec(basic_consume/7 :: (rabbit_types:amqqueue(), boolean(), pid(), pid() | 'undefined', rabbit_types:ctag(), boolean(), any()) - -> 'ok' | {'error', 'exclusive_consume_unavailable'}). + -> 'ok' | rabbit_types:error('exclusive_consume_unavailable')). -spec(basic_cancel/4 :: (rabbit_types:amqqueue(), pid(), rabbit_types:ctag(), any()) -> 'ok'). -spec(notify_sent/2 :: (pid(), pid()) -> 'ok'). -spec(unblock/2 :: (pid(), pid()) -> 'ok'). -spec(flush_all/2 :: ([pid()], pid()) -> 'ok'). -spec(internal_declare/2 :: (rabbit_types:amqqueue(), boolean()) -> rabbit_types:amqqueue() | 'not_found'). --spec(internal_delete/1 :: (name()) -> 'ok' | rabbit_types:not_found()). +-spec(internal_delete/1 :: (name()) -> 'ok' | rabbit_types:error('not_found')). -spec(maybe_run_queue_via_backing_queue/2 :: (pid(), (fun ((A) -> A))) -> 'ok'). -spec(update_ram_duration/1 :: (pid()) -> 'ok'). -spec(set_ram_duration_target/2 :: (pid(), number() | 'infinity') -> 'ok'). diff --git a/src/rabbit_basic.erl b/src/rabbit_basic.erl index 76153010..5d50f5c2 100644 --- a/src/rabbit_basic.erl +++ b/src/rabbit_basic.erl @@ -44,14 +44,14 @@ -type(properties_input() :: (rabbit_framing:amqp_property_record() | [{atom(), any()}])). -type(publish_result() :: ({ok, rabbit_router:routing_result(), [pid()]} - | rabbit_types:not_found())). + | rabbit_types:error('not_found'))). -spec(publish/1 :: (rabbit_types:delivery()) -> publish_result()). -spec(delivery/4 :: (boolean(), boolean(), rabbit_types:maybe(rabbit_types:txn()), rabbit_types:message()) -> rabbit_types:delivery()). -spec(message/4 :: (rabbit_exchange:name(), rabbit_router:routing_key(), properties_input(), binary()) - -> (rabbit_types:message() | {'error', any()})). + -> (rabbit_types:message() | rabbit_types:error(any()))). -spec(properties/1 :: (properties_input()) -> rabbit_framing:amqp_property_record()). -spec(publish/4 :: (rabbit_exchange:name(), rabbit_router:routing_key(), properties_input(), binary()) -> publish_result()). diff --git a/src/rabbit_exchange.erl b/src/rabbit_exchange.erl index b63fd876..8a3262d5 100644 --- a/src/rabbit_exchange.erl +++ b/src/rabbit_exchange.erl @@ -62,10 +62,9 @@ -type(type() :: atom()). -type(binding_key() :: binary()). --type(bind_res() :: 'ok' | {'error', - 'queue_not_found' | - 'exchange_not_found' | - 'exchange_and_queue_not_found'}). +-type(bind_res() :: 'ok' | rabbit_types:error('queue_not_found') | + rabbit_types:error('exchange_not_found') | + rabbit_types:error('exchange_and_queue_not_found')). -type(inner_fun() :: fun((rabbit_types:exchange(), queue()) -> any())). -spec(recover/0 :: () -> 'ok'). @@ -77,7 +76,7 @@ -spec(assert_args_equivalence/2 :: (rabbit_types:exchange(), rabbit_framing:amqp_table()) -> 'ok'). -spec(lookup/1 :: (name()) - -> {'ok', rabbit_types:exchange()} | rabbit_types:not_found()). + -> {'ok', rabbit_types:exchange()} | rabbit_types:error('not_found')). -spec(lookup_or_die/1 :: (name()) -> rabbit_types:exchange()). -spec(list/1 :: (rabbit_types:vhost()) -> [rabbit_types:exchange()]). -spec(info_keys/0 :: () -> [rabbit_types:info_key()]). @@ -94,7 +93,7 @@ -spec(delete_binding/5 :: (name(), rabbit_amqqueue:name(), rabbit_router:routing_key(), rabbit_framing:amqp_table(), inner_fun()) - -> bind_res() | {'error', 'binding_not_found'}). + -> bind_res() | rabbit_types:error('binding_not_found')). -spec(list_bindings/1 :: (rabbit_types:vhost()) -> [{name(), rabbit_amqqueue:name(), rabbit_router:routing_key(), rabbit_framing:amqp_table()}]). @@ -103,7 +102,7 @@ -spec(delete_transient_queue_bindings/1 :: (rabbit_amqqueue:name()) -> fun (() -> none())). -spec(delete/2 :: (name(), boolean()) -> - 'ok' | rabbit_types:not_found() | {'error', 'in_use'}). + 'ok' | rabbit_types:error('not_found') | rabbit_types:error('in_use')). -spec(list_queue_bindings/1 :: (rabbit_amqqueue:name()) -> [{name(), rabbit_router:routing_key(), rabbit_framing:amqp_table()}]). diff --git a/src/rabbit_exchange_type_registry.erl b/src/rabbit_exchange_type_registry.erl index 33ea0e92..acad1875 100644 --- a/src/rabbit_exchange_type_registry.erl +++ b/src/rabbit_exchange_type_registry.erl @@ -45,10 +45,10 @@ -ifdef(use_specs). --spec(start_link/0 :: () -> 'ignore' | {'error', term()} | {'ok', pid()}). +-spec(start_link/0 :: () -> 'ignore' | rabbit_types:error(term()) | {'ok', pid()}). -spec(register/2 :: (binary(), atom()) -> 'ok'). --spec(binary_to_type/1 :: (binary()) -> atom() | {'error', 'not_found'}). --spec(lookup_module/1 :: (atom()) -> {'ok', atom()} | {'error', 'not_found'}). +-spec(binary_to_type/1 :: (binary()) -> atom() | rabbit_types:error('not_found')). +-spec(lookup_module/1 :: (atom()) -> {'ok', atom()} | rabbit_types:error('not_found')). -endif. diff --git a/src/rabbit_guid.erl b/src/rabbit_guid.erl index 6afbbee9..dfbe0d84 100644 --- a/src/rabbit_guid.erl +++ b/src/rabbit_guid.erl @@ -54,7 +54,7 @@ -type(guid() :: binary()). --spec(start_link/0 :: () -> {'ok', pid()} | 'ignore' | {'error', any()}). +-spec(start_link/0 :: () -> {'ok', pid()} | 'ignore' | rabbit_types:error(any())). -spec(guid/0 :: () -> guid()). -spec(string_guid/1 :: (any()) -> string()). -spec(binstring_guid/1 :: (any()) -> binary()). diff --git a/src/rabbit_log.erl b/src/rabbit_log.erl index cc80e360..15fe8dea 100644 --- a/src/rabbit_log.erl +++ b/src/rabbit_log.erl @@ -50,7 +50,7 @@ -ifdef(use_specs). --spec(start_link/0 :: () -> {'ok', pid()} | 'ignore' | {'error', any()}). +-spec(start_link/0 :: () -> {'ok', pid()} | 'ignore' | rabbit_types:error(any())). -spec(debug/1 :: (string()) -> 'ok'). -spec(debug/2 :: (string(), [any()]) -> 'ok'). -spec(info/1 :: (string()) -> 'ok'). diff --git a/src/rabbit_memory_monitor.erl b/src/rabbit_memory_monitor.erl index e78b59f1..55d26c57 100644 --- a/src/rabbit_memory_monitor.erl +++ b/src/rabbit_memory_monitor.erl @@ -86,7 +86,7 @@ -ifdef(use_specs). --spec(start_link/0 :: () -> 'ignore' | {'error', _} | {'ok', pid()}). +-spec(start_link/0 :: () -> 'ignore' | rabbit_types:error(any()) | {'ok', pid()}). -spec(update/0 :: () -> 'ok'). -spec(register/2 :: (pid(), {atom(),atom(),[any()]}) -> 'ok'). -spec(deregister/1 :: (pid()) -> 'ok'). diff --git a/src/rabbit_misc.erl b/src/rabbit_misc.erl index 67150563..8d4d0460 100644 --- a/src/rabbit_misc.erl +++ b/src/rabbit_misc.erl @@ -74,7 +74,7 @@ -export_type([resource_name/0]). --type(ok_or_error() :: 'ok' | {'error', any()}). +-type(ok_or_error() :: 'ok' | rabbit_types:error(any())). -type(resource_name() :: binary()). -type(thunk(T) :: fun(() -> T)). @@ -93,10 +93,10 @@ -spec(protocol_error/4 :: (rabbit_framing:amqp_exception(), string(), [any()], rabbit_framing:amqp_method_name()) -> no_return()). -spec(not_found/1 :: (rabbit_types:r(atom())) -> no_return()). --spec(get_config/1 :: (atom()) -> {'ok', any()} | rabbit_types:not_found()). +-spec(get_config/1 :: (atom()) -> {'ok', any()} | rabbit_types:error('not_found')). -spec(get_config/2 :: (atom(), A) -> A). -spec(set_config/2 :: (atom(), any()) -> 'ok'). --spec(dirty_read/1 :: ({atom(), any()}) -> {'ok', any()} | rabbit_types:not_found()). +-spec(dirty_read/1 :: ({atom(), any()}) -> {'ok', any()} | rabbit_types:error('not_found')). -spec(r/3 :: (rabbit_types:vhost() | rabbit_types:r(atom()), K, resource_name()) -> rabbit_types:r(K) when is_subtype(K, atom())). -spec(r/2 :: (rabbit_types:vhost(), K) @@ -113,7 +113,7 @@ -spec(report_cover/0 :: () -> 'ok'). -spec(enable_cover/1 :: (file:filename()) -> ok_or_error()). -spec(report_cover/1 :: (file:filename()) -> 'ok'). --spec(throw_on_error/2 :: (atom(), thunk({error, any()} | {ok, A} | A)) -> A). +-spec(throw_on_error/2 :: (atom(), thunk(rabbit_types:error(any()) | {ok, A} | A)) -> A). -spec(with_exit_handler/2 :: (thunk(A), thunk(A)) -> A). -spec(filter_exit_map/2 :: (fun ((A) -> B), [A]) -> [B]). -spec(with_user/2 :: (rabbit_access_control:username(), thunk(A)) -> A). @@ -134,7 +134,7 @@ -spec(dirty_foreach_key/2 :: (fun ((any()) -> any()), atom()) -> 'ok' | 'aborted'). -spec(dirty_dump_log/1 :: (file:filename()) -> ok_or_error()). --spec(read_term_file/1 :: (file:filename()) -> {'ok', [any()]} | {'error', any()}). +-spec(read_term_file/1 :: (file:filename()) -> {'ok', [any()]} | rabbit_types:error(any())). -spec(write_term_file/2 :: (file:filename(), [any()]) -> ok_or_error()). -spec(append_file/2 :: (file:filename(), string()) -> ok_or_error()). -spec(ensure_parent_dirs_exist/1 :: (string()) -> 'ok'). diff --git a/src/rabbit_net.erl b/src/rabbit_net.erl index 8848ea87..e1c77e29 100644 --- a/src/rabbit_net.erl +++ b/src/rabbit_net.erl @@ -43,7 +43,7 @@ -type(stat_option() :: 'recv_cnt' | 'recv_max' | 'recv_avg' | 'recv_oct' | 'recv_dvi' | 'send_cnt' | 'send_max' | 'send_avg' | 'send_oct' | 'send_pend'). --type(error() :: {'error', any()}). +-type(error() :: rabbit_types:error(any())). -type(socket() :: rabbit_networking:ip_port() | rabbit_types:ssl_socket()). -spec(async_recv/3 :: (socket(), integer(), timeout()) -> {'ok', any()}). diff --git a/src/rabbit_persister.erl b/src/rabbit_persister.erl index ea290b37..8505dfdb 100644 --- a/src/rabbit_persister.erl +++ b/src/rabbit_persister.erl @@ -74,7 +74,7 @@ {ack, pmsg()}). -spec(start_link/1 :: ([rabbit_amqqueue:name()]) -> - {'ok', pid()} | 'ignore' | {'error', any()}). + {'ok', pid()} | 'ignore' | rabbit_types:error(any())). -spec(transaction/1 :: ([work_item()]) -> 'ok'). -spec(extend_transaction/2 :: ({rabbit_types:txn(), rabbit_amqqueue:name()}, [work_item()]) -> 'ok'). -spec(dirty_work/1 :: ([work_item()]) -> 'ok'). diff --git a/src/rabbit_types.erl b/src/rabbit_types.erl index 22f9f8d7..dd88135b 100644 --- a/src/rabbit_types.erl +++ b/src/rabbit_types.erl @@ -38,8 +38,8 @@ -export_type([txn/0, maybe/1, info/0, info_key/0, message/0, basic_message/0, delivery/0, content/0, decoded_content/0, undecoded_content/0, unencoded_content/0, encoded_content/0, vhost/0, ctag/0, amqp_error/0, - not_found/0, r/1, ssl_socket/0, listener/0, binding/0, amqqueue/0, - exchange/0, connection/0, user/0]). + r/1, ssl_socket/0, listener/0, binding/0, amqqueue/0, + exchange/0, connection/0, user/0, error/1]). -type(maybe(T) :: T | 'none'). -type(vhost() :: binary()). @@ -92,8 +92,6 @@ #amqp_error{name :: rabbit_framing:amqp_exception(), explanation :: string(), method :: rabbit_framing:amqp_method_name()}). --type(not_found() :: {'error', 'not_found'}). - -type(r(Kind) :: #resource{virtual_host :: rabbit_types:vhost(), kind :: Kind, @@ -133,4 +131,6 @@ #user{username :: rabbit_access_control:username(), password :: rabbit_access_control:password()}). +-type(error(A) :: {'error', A}). + -endif. % use_specs diff --git a/src/vm_memory_monitor.erl b/src/vm_memory_monitor.erl index cd03fcc6..20890672 100644 --- a/src/vm_memory_monitor.erl +++ b/src/vm_memory_monitor.erl @@ -73,7 +73,7 @@ -ifdef(use_specs). -spec(start_link/1 :: (float()) -> - ('ignore' | {'error', any()} | {'ok', pid()})). + ('ignore' | rabbit_types:error(any()) | {'ok', pid()})). -spec(update/0 :: () -> 'ok'). -spec(get_total_memory/0 :: () -> (non_neg_integer() | 'unknown')). -spec(get_vm_limit/0 :: () -> (non_neg_integer() | 'unknown')). diff --git a/src/worker_pool.erl b/src/worker_pool.erl index 97e07545..cc2658d9 100644 --- a/src/worker_pool.erl +++ b/src/worker_pool.erl @@ -52,7 +52,7 @@ -ifdef(use_specs). --spec(start_link/0 :: () -> {'ok', pid()} | 'ignore' | {'error', any()}). +-spec(start_link/0 :: () -> {'ok', pid()} | 'ignore' | rabbit_types:error(any())). -spec(submit/1 :: (fun (() -> A) | {atom(), atom(), [any()]}) -> A). -spec(submit_async/1 :: (fun (() -> any()) | {atom(), atom(), [any()]}) -> 'ok'). diff --git a/src/worker_pool_sup.erl b/src/worker_pool_sup.erl index 4ded63a8..dbffff10 100644 --- a/src/worker_pool_sup.erl +++ b/src/worker_pool_sup.erl @@ -41,9 +41,9 @@ -ifdef(use_specs). --spec(start_link/0 :: () -> {'ok', pid()} | 'ignore' | {'error', any()}). +-spec(start_link/0 :: () -> {'ok', pid()} | 'ignore' | rabbit_types:error(any())). -spec(start_link/1 :: - (non_neg_integer()) -> {'ok', pid()} | 'ignore' | {'error', any()}). + (non_neg_integer()) -> {'ok', pid()} | 'ignore' | rabbit_types:error(any())). -endif. diff --git a/src/worker_pool_worker.erl b/src/worker_pool_worker.erl index 57901fd5..6a14484e 100644 --- a/src/worker_pool_worker.erl +++ b/src/worker_pool_worker.erl @@ -44,7 +44,7 @@ -ifdef(use_specs). --spec(start_link/1 :: (any()) -> {'ok', pid()} | 'ignore' | {'error', any()}). +-spec(start_link/1 :: (any()) -> {'ok', pid()} | 'ignore' | rabbit_types:error(any())). -spec(submit/2 :: (pid(), fun (() -> A) | {atom(), atom(), [any()]}) -> A). -spec(submit_async/2 :: (pid(), fun (() -> any()) | {atom(), atom(), [any()]}) -> 'ok'). -- cgit v1.2.1 From 12806334fb5123f8a2229cc28951cd51c9ba5e3c Mon Sep 17 00:00:00 2001 From: Alexandru Scvortov Date: Tue, 6 Jul 2010 11:31:18 +0100 Subject: {'ok' | error(...)} -> rabbit_types:ok_or_error(...) --- src/file_handle_cache.erl | 5 ++--- src/rabbit.erl | 2 +- src/rabbit_amqqueue.erl | 4 ++-- src/rabbit_exchange.erl | 6 +++--- src/rabbit_misc.erl | 4 ++-- src/rabbit_net.erl | 6 +++--- src/rabbit_types.erl | 3 ++- 7 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/file_handle_cache.erl b/src/file_handle_cache.erl index 888aed1f..99a4336d 100644 --- a/src/file_handle_cache.erl +++ b/src/file_handle_cache.erl @@ -182,9 +182,8 @@ -ifdef(use_specs). -type(ref() :: any()). --type(error() :: rabbit_types:error(any())). --type(ok_or_error() :: ('ok' | error())). --type(val_or_error(T) :: ({'ok', T} | error())). +-type(ok_or_error() :: rabbit_types:ok_or_error(any())). +-type(val_or_error(T) :: ({'ok', T} | rabbit_types:error(any()))). -type(position() :: ('bof' | 'eof' | non_neg_integer() | {('bof' |'eof'), non_neg_integer()} | {'cur', integer()})). -type(offset() :: non_neg_integer()). diff --git a/src/rabbit.erl b/src/rabbit.erl index df466274..ec2dba46 100644 --- a/src/rabbit.erl +++ b/src/rabbit.erl @@ -191,7 +191,7 @@ -spec(start/0 :: () -> 'ok'). -spec(stop/0 :: () -> 'ok'). -spec(stop_and_halt/0 :: () -> 'ok'). --spec(rotate_logs/1 :: (file_suffix()) -> 'ok' | rabbit_types:error(any())). +-spec(rotate_logs/1 :: (file_suffix()) -> rabbit_types:ok_or_error(any())). -spec(status/0 :: () -> [{running_applications, [{atom(), string(), string()}]} | {nodes, [{rabbit_mnesia:node_type(), [node()]}]} | diff --git a/src/rabbit_amqqueue.erl b/src/rabbit_amqqueue.erl index fa7ceda6..c578c66b 100644 --- a/src/rabbit_amqqueue.erl +++ b/src/rabbit_amqqueue.erl @@ -114,13 +114,13 @@ -spec(basic_consume/7 :: (rabbit_types:amqqueue(), boolean(), pid(), pid() | 'undefined', rabbit_types:ctag(), boolean(), any()) - -> 'ok' | rabbit_types:error('exclusive_consume_unavailable')). + -> rabbit_types:ok_or_error('exclusive_consume_unavailable')). -spec(basic_cancel/4 :: (rabbit_types:amqqueue(), pid(), rabbit_types:ctag(), any()) -> 'ok'). -spec(notify_sent/2 :: (pid(), pid()) -> 'ok'). -spec(unblock/2 :: (pid(), pid()) -> 'ok'). -spec(flush_all/2 :: ([pid()], pid()) -> 'ok'). -spec(internal_declare/2 :: (rabbit_types:amqqueue(), boolean()) -> rabbit_types:amqqueue() | 'not_found'). --spec(internal_delete/1 :: (name()) -> 'ok' | rabbit_types:error('not_found')). +-spec(internal_delete/1 :: (name()) -> rabbit_types:ok_or_error('not_found')). -spec(maybe_run_queue_via_backing_queue/2 :: (pid(), (fun ((A) -> A))) -> 'ok'). -spec(update_ram_duration/1 :: (pid()) -> 'ok'). -spec(set_ram_duration_target/2 :: (pid(), number() | 'infinity') -> 'ok'). diff --git a/src/rabbit_exchange.erl b/src/rabbit_exchange.erl index 8a3262d5..a0f8ed91 100644 --- a/src/rabbit_exchange.erl +++ b/src/rabbit_exchange.erl @@ -62,9 +62,9 @@ -type(type() :: atom()). -type(binding_key() :: binary()). --type(bind_res() :: 'ok' | rabbit_types:error('queue_not_found') | - rabbit_types:error('exchange_not_found') | - rabbit_types:error('exchange_and_queue_not_found')). +-type(bind_res() :: rabbit_types:ok_or_error('queue_not_found' | + 'exchange_not_found' | + 'exchange_and_queue_not_found')). -type(inner_fun() :: fun((rabbit_types:exchange(), queue()) -> any())). -spec(recover/0 :: () -> 'ok'). diff --git a/src/rabbit_misc.erl b/src/rabbit_misc.erl index 8d4d0460..98921ad3 100644 --- a/src/rabbit_misc.erl +++ b/src/rabbit_misc.erl @@ -74,7 +74,7 @@ -export_type([resource_name/0]). --type(ok_or_error() :: 'ok' | rabbit_types:error(any())). +-type(ok_or_error() :: rabbit_types:ok_or_error(any())). -type(resource_name() :: binary()). -type(thunk(T) :: fun(() -> T)). @@ -151,7 +151,7 @@ -spec(version_compare/3 :: (string(), string(), ('lt' | 'lte' | 'eq' | 'gte' | 'gt')) -> boolean()). -spec(recursive_delete/1 :: ([file:filename()]) -> - 'ok' | {'error', {file:filename(), any()}}). + rabbit_types:ok_or_error({file:filename(), any()})). -spec(dict_cons/3 :: (any(), any(), dict()) -> dict()). -spec(unlink_and_capture_exit/1 :: (pid()) -> 'ok'). diff --git a/src/rabbit_net.erl b/src/rabbit_net.erl index e1c77e29..cd0ea7d6 100644 --- a/src/rabbit_net.erl +++ b/src/rabbit_net.erl @@ -47,10 +47,10 @@ -type(socket() :: rabbit_networking:ip_port() | rabbit_types:ssl_socket()). -spec(async_recv/3 :: (socket(), integer(), timeout()) -> {'ok', any()}). --spec(close/1 :: (socket()) -> 'ok' | error()). --spec(controlling_process/2 :: (socket(), pid()) -> 'ok' | error()). +-spec(close/1 :: (socket()) -> rabbit_types:ok_or_error(any())). +-spec(controlling_process/2 :: (socket(), pid()) -> rabbit_types:ok_or_error(any())). -spec(port_command/2 :: (socket(), iolist()) -> 'true'). --spec(send/2 :: (socket(), binary() | iolist()) -> 'ok' | error()). +-spec(send/2 :: (socket(), binary() | iolist()) -> rabbit_types:ok_or_error(any())). -spec(peername/1 :: (socket()) -> {'ok', {inet:ip_address(), rabbit_networking:ip_port()}} | error()). -spec(sockname/1 :: (socket()) -> diff --git a/src/rabbit_types.erl b/src/rabbit_types.erl index dd88135b..5adf72d7 100644 --- a/src/rabbit_types.erl +++ b/src/rabbit_types.erl @@ -39,7 +39,7 @@ delivery/0, content/0, decoded_content/0, undecoded_content/0, unencoded_content/0, encoded_content/0, vhost/0, ctag/0, amqp_error/0, r/1, ssl_socket/0, listener/0, binding/0, amqqueue/0, - exchange/0, connection/0, user/0, error/1]). + exchange/0, connection/0, user/0, error/1, ok_or_error/1]). -type(maybe(T) :: T | 'none'). -type(vhost() :: binary()). @@ -132,5 +132,6 @@ password :: rabbit_access_control:password()}). -type(error(A) :: {'error', A}). +-type(ok_or_error(A) :: 'ok' | error(A)). -endif. % use_specs -- cgit v1.2.1 From f585792df291dd5566bbc6853309bdc9d299a895 Mon Sep 17 00:00:00 2001 From: Alexandru Scvortov Date: Tue, 6 Jul 2010 11:46:40 +0100 Subject: {'ok', A} -> rabbit_types:ok(A) --- src/delegate.erl | 2 +- src/delegate_sup.erl | 2 +- src/file_handle_cache.erl | 2 +- src/pg_local.erl | 4 ++-- src/rabbit_access_control.erl | 2 +- src/rabbit_amqqueue.erl | 4 ++-- src/rabbit_exchange.erl | 2 +- src/rabbit_exchange_type_registry.erl | 4 ++-- src/rabbit_guid.erl | 2 +- src/rabbit_log.erl | 2 +- src/rabbit_memory_monitor.erl | 2 +- src/rabbit_misc.erl | 4 ++-- src/rabbit_net.erl | 8 ++++---- src/rabbit_persister.erl | 2 +- src/rabbit_reader_queue_collector.erl | 2 +- src/rabbit_types.erl | 3 ++- src/vm_memory_monitor.erl | 2 +- src/worker_pool.erl | 2 +- src/worker_pool_sup.erl | 4 ++-- 19 files changed, 28 insertions(+), 27 deletions(-) diff --git a/src/delegate.erl b/src/delegate.erl index 8af28127..c2185e06 100644 --- a/src/delegate.erl +++ b/src/delegate.erl @@ -44,7 +44,7 @@ -ifdef(use_specs). --spec(start_link/1 :: (non_neg_integer()) -> {'ok', pid()}). +-spec(start_link/1 :: (non_neg_integer()) -> rabbit_types:ok(pid())). -spec(invoke_no_result/2 :: (pid() | [pid()], fun ((pid()) -> any())) -> 'ok'). -spec(invoke/2 :: (pid() | [pid()], fun ((pid()) -> A)) -> A). diff --git a/src/delegate_sup.erl b/src/delegate_sup.erl index 78368090..9a308eb1 100644 --- a/src/delegate_sup.erl +++ b/src/delegate_sup.erl @@ -43,7 +43,7 @@ -ifdef(use_specs). --spec(start_link/0 :: () -> {'ok', pid()} | 'ignore' | rabbit_types:error(any())). +-spec(start_link/0 :: () -> rabbit_types:ok(pid()) | 'ignore' | rabbit_types:error(any())). -endif. diff --git a/src/file_handle_cache.erl b/src/file_handle_cache.erl index 99a4336d..790c1e08 100644 --- a/src/file_handle_cache.erl +++ b/src/file_handle_cache.erl @@ -183,7 +183,7 @@ -type(ref() :: any()). -type(ok_or_error() :: rabbit_types:ok_or_error(any())). --type(val_or_error(T) :: ({'ok', T} | rabbit_types:error(any()))). +-type(val_or_error(T) :: (rabbit_types:ok(T) | rabbit_types:error(any()))). -type(position() :: ('bof' | 'eof' | non_neg_integer() | {('bof' |'eof'), non_neg_integer()} | {'cur', integer()})). -type(offset() :: non_neg_integer()). diff --git a/src/pg_local.erl b/src/pg_local.erl index 4f22fb34..a316e1e0 100644 --- a/src/pg_local.erl +++ b/src/pg_local.erl @@ -45,8 +45,8 @@ -type(name() :: term()). --spec(start_link/0 :: () -> {'ok', pid()} | rabbit_types:error(term())). --spec(start/0 :: () -> {'ok', pid()} | rabbit_types:error(term())). +-spec(start_link/0 :: () -> rabbit_types:ok(pid()) | rabbit_types:error(term())). +-spec(start/0 :: () -> rabbit_types:ok(pid()) | rabbit_types:error(term())). -spec(join/2 :: (name(), pid()) -> 'ok'). -spec(leave/2 :: (name(), pid()) -> 'ok'). -spec(get_members/1 :: (name()) -> [pid()]). diff --git a/src/rabbit_access_control.erl b/src/rabbit_access_control.erl index 20415fd0..4b068447 100644 --- a/src/rabbit_access_control.erl +++ b/src/rabbit_access_control.erl @@ -62,7 +62,7 @@ -spec(change_password/2 :: (username(), password()) -> 'ok'). -spec(list_users/0 :: () -> [username()]). -spec(lookup_user/1 :: (username()) -> - {'ok', rabbit_types:user()} | rabbit_types:error('not_found')). + rabbit_types:ok(rabbit_types:user()) | rabbit_types:error('not_found')). -spec(add_vhost/1 :: (rabbit_types:vhost()) -> 'ok'). -spec(delete_vhost/1 :: (rabbit_types:vhost()) -> 'ok'). -spec(list_vhosts/0 :: () -> [rabbit_types:vhost()]). diff --git a/src/rabbit_amqqueue.erl b/src/rabbit_amqqueue.erl index c578c66b..169acd80 100644 --- a/src/rabbit_amqqueue.erl +++ b/src/rabbit_amqqueue.erl @@ -63,7 +63,7 @@ -type(name() :: rabbit_types:r('queue')). --type(qlen() :: {'ok', non_neg_integer()}). +-type(qlen() :: rabbit_types:ok(non_neg_integer())). -type(qfun(A) :: fun ((rabbit_types:amqqueue()) -> A)). -type(qmsg() :: {name(), pid(), msg_id(), boolean(), rabbit_types:message()}). -type(msg_id() :: non_neg_integer()). @@ -73,7 +73,7 @@ -spec(start/0 :: () -> 'ok'). -spec(declare/5 :: (name(), boolean(), boolean(), rabbit_framing:amqp_table(), rabbit_types:maybe(pid())) -> {'new' | 'existing', rabbit_types:amqqueue()}). --spec(lookup/1 :: (name()) -> {'ok', rabbit_types:amqqueue()} | rabbit_types:error('not_found')). +-spec(lookup/1 :: (name()) -> rabbit_types:ok(rabbit_types:amqqueue()) | rabbit_types:error('not_found')). -spec(with/2 :: (name(), qfun(A)) -> A | rabbit_types:error('not_found')). -spec(with_or_die/2 :: (name(), qfun(A)) -> A). -spec(assert_equivalence/5 :: (rabbit_types:amqqueue(), boolean(), boolean(), diff --git a/src/rabbit_exchange.erl b/src/rabbit_exchange.erl index a0f8ed91..024dccf0 100644 --- a/src/rabbit_exchange.erl +++ b/src/rabbit_exchange.erl @@ -76,7 +76,7 @@ -spec(assert_args_equivalence/2 :: (rabbit_types:exchange(), rabbit_framing:amqp_table()) -> 'ok'). -spec(lookup/1 :: (name()) - -> {'ok', rabbit_types:exchange()} | rabbit_types:error('not_found')). + -> rabbit_types:ok(rabbit_types:exchange()) | rabbit_types:error('not_found')). -spec(lookup_or_die/1 :: (name()) -> rabbit_types:exchange()). -spec(list/1 :: (rabbit_types:vhost()) -> [rabbit_types:exchange()]). -spec(info_keys/0 :: () -> [rabbit_types:info_key()]). diff --git a/src/rabbit_exchange_type_registry.erl b/src/rabbit_exchange_type_registry.erl index acad1875..729ede3e 100644 --- a/src/rabbit_exchange_type_registry.erl +++ b/src/rabbit_exchange_type_registry.erl @@ -45,10 +45,10 @@ -ifdef(use_specs). --spec(start_link/0 :: () -> 'ignore' | rabbit_types:error(term()) | {'ok', pid()}). +-spec(start_link/0 :: () -> 'ignore' | rabbit_types:error(term()) | rabbit_types:ok(pid())). -spec(register/2 :: (binary(), atom()) -> 'ok'). -spec(binary_to_type/1 :: (binary()) -> atom() | rabbit_types:error('not_found')). --spec(lookup_module/1 :: (atom()) -> {'ok', atom()} | rabbit_types:error('not_found')). +-spec(lookup_module/1 :: (atom()) -> rabbit_types:ok(atom()) | rabbit_types:error('not_found')). -endif. diff --git a/src/rabbit_guid.erl b/src/rabbit_guid.erl index dfbe0d84..45cbcc80 100644 --- a/src/rabbit_guid.erl +++ b/src/rabbit_guid.erl @@ -54,7 +54,7 @@ -type(guid() :: binary()). --spec(start_link/0 :: () -> {'ok', pid()} | 'ignore' | rabbit_types:error(any())). +-spec(start_link/0 :: () -> rabbit_types:ok(pid()) | 'ignore' | rabbit_types:error(any())). -spec(guid/0 :: () -> guid()). -spec(string_guid/1 :: (any()) -> string()). -spec(binstring_guid/1 :: (any()) -> binary()). diff --git a/src/rabbit_log.erl b/src/rabbit_log.erl index 15fe8dea..7beed2c0 100644 --- a/src/rabbit_log.erl +++ b/src/rabbit_log.erl @@ -50,7 +50,7 @@ -ifdef(use_specs). --spec(start_link/0 :: () -> {'ok', pid()} | 'ignore' | rabbit_types:error(any())). +-spec(start_link/0 :: () -> rabbit_types:ok(pid()) | 'ignore' | rabbit_types:error(any())). -spec(debug/1 :: (string()) -> 'ok'). -spec(debug/2 :: (string(), [any()]) -> 'ok'). -spec(info/1 :: (string()) -> 'ok'). diff --git a/src/rabbit_memory_monitor.erl b/src/rabbit_memory_monitor.erl index 55d26c57..4c5695e9 100644 --- a/src/rabbit_memory_monitor.erl +++ b/src/rabbit_memory_monitor.erl @@ -86,7 +86,7 @@ -ifdef(use_specs). --spec(start_link/0 :: () -> 'ignore' | rabbit_types:error(any()) | {'ok', pid()}). +-spec(start_link/0 :: () -> 'ignore' | rabbit_types:error(any()) | rabbit_types:ok(pid())). -spec(update/0 :: () -> 'ok'). -spec(register/2 :: (pid(), {atom(),atom(),[any()]}) -> 'ok'). -spec(deregister/1 :: (pid()) -> 'ok'). diff --git a/src/rabbit_misc.erl b/src/rabbit_misc.erl index 98921ad3..0133b9cf 100644 --- a/src/rabbit_misc.erl +++ b/src/rabbit_misc.erl @@ -93,10 +93,10 @@ -spec(protocol_error/4 :: (rabbit_framing:amqp_exception(), string(), [any()], rabbit_framing:amqp_method_name()) -> no_return()). -spec(not_found/1 :: (rabbit_types:r(atom())) -> no_return()). --spec(get_config/1 :: (atom()) -> {'ok', any()} | rabbit_types:error('not_found')). +-spec(get_config/1 :: (atom()) -> rabbit_types:ok(any()) | rabbit_types:error('not_found')). -spec(get_config/2 :: (atom(), A) -> A). -spec(set_config/2 :: (atom(), any()) -> 'ok'). --spec(dirty_read/1 :: ({atom(), any()}) -> {'ok', any()} | rabbit_types:error('not_found')). +-spec(dirty_read/1 :: ({atom(), any()}) -> rabbit_types:ok(any()) | rabbit_types:error('not_found')). -spec(r/3 :: (rabbit_types:vhost() | rabbit_types:r(atom()), K, resource_name()) -> rabbit_types:r(K) when is_subtype(K, atom())). -spec(r/2 :: (rabbit_types:vhost(), K) diff --git a/src/rabbit_net.erl b/src/rabbit_net.erl index cd0ea7d6..20485bec 100644 --- a/src/rabbit_net.erl +++ b/src/rabbit_net.erl @@ -46,17 +46,17 @@ -type(error() :: rabbit_types:error(any())). -type(socket() :: rabbit_networking:ip_port() | rabbit_types:ssl_socket()). --spec(async_recv/3 :: (socket(), integer(), timeout()) -> {'ok', any()}). +-spec(async_recv/3 :: (socket(), integer(), timeout()) -> rabbit_types:ok(any())). -spec(close/1 :: (socket()) -> rabbit_types:ok_or_error(any())). -spec(controlling_process/2 :: (socket(), pid()) -> rabbit_types:ok_or_error(any())). -spec(port_command/2 :: (socket(), iolist()) -> 'true'). -spec(send/2 :: (socket(), binary() | iolist()) -> rabbit_types:ok_or_error(any())). -spec(peername/1 :: (socket()) -> - {'ok', {inet:ip_address(), rabbit_networking:ip_port()}} | error()). + rabbit_types:ok({inet:ip_address(), rabbit_networking:ip_port()}) | error()). -spec(sockname/1 :: (socket()) -> - {'ok', {inet:ip_address(), rabbit_networking:ip_port()}} | error()). + rabbit_types:ok({inet:ip_address(), rabbit_networking:ip_port()}) | error()). -spec(getstat/2 :: (socket(), [stat_option()]) -> - {'ok', [{stat_option(), integer()}]} | error()). + rabbit_types:ok([{stat_option(), integer()}]) | error()). -endif. diff --git a/src/rabbit_persister.erl b/src/rabbit_persister.erl index 8505dfdb..327fc4b7 100644 --- a/src/rabbit_persister.erl +++ b/src/rabbit_persister.erl @@ -74,7 +74,7 @@ {ack, pmsg()}). -spec(start_link/1 :: ([rabbit_amqqueue:name()]) -> - {'ok', pid()} | 'ignore' | rabbit_types:error(any())). + rabbit_types:ok(pid()) | 'ignore' | rabbit_types:error(any())). -spec(transaction/1 :: ([work_item()]) -> 'ok'). -spec(extend_transaction/2 :: ({rabbit_types:txn(), rabbit_amqqueue:name()}, [work_item()]) -> 'ok'). -spec(dirty_work/1 :: ([work_item()]) -> 'ok'). diff --git a/src/rabbit_reader_queue_collector.erl b/src/rabbit_reader_queue_collector.erl index e0919cd5..a9117e9c 100644 --- a/src/rabbit_reader_queue_collector.erl +++ b/src/rabbit_reader_queue_collector.erl @@ -46,7 +46,7 @@ -ifdef(use_specs). --spec(start_link/0 :: () -> {'ok', pid()}). +-spec(start_link/0 :: () -> rabbit_types:ok(pid())). -spec(register_exclusive_queue/2 :: (pid(), rabbit_types:amqqueue()) -> 'ok'). -spec(delete_all/1 :: (pid()) -> 'ok'). diff --git a/src/rabbit_types.erl b/src/rabbit_types.erl index 5adf72d7..e42c6b44 100644 --- a/src/rabbit_types.erl +++ b/src/rabbit_types.erl @@ -39,7 +39,7 @@ delivery/0, content/0, decoded_content/0, undecoded_content/0, unencoded_content/0, encoded_content/0, vhost/0, ctag/0, amqp_error/0, r/1, ssl_socket/0, listener/0, binding/0, amqqueue/0, - exchange/0, connection/0, user/0, error/1, ok_or_error/1]). + exchange/0, connection/0, user/0, error/1, ok_or_error/1, ok/1]). -type(maybe(T) :: T | 'none'). -type(vhost() :: binary()). @@ -131,6 +131,7 @@ #user{username :: rabbit_access_control:username(), password :: rabbit_access_control:password()}). +-type(ok(A) :: {'ok', A}). -type(error(A) :: {'error', A}). -type(ok_or_error(A) :: 'ok' | error(A)). diff --git a/src/vm_memory_monitor.erl b/src/vm_memory_monitor.erl index 20890672..069c5a0f 100644 --- a/src/vm_memory_monitor.erl +++ b/src/vm_memory_monitor.erl @@ -73,7 +73,7 @@ -ifdef(use_specs). -spec(start_link/1 :: (float()) -> - ('ignore' | rabbit_types:error(any()) | {'ok', pid()})). + ('ignore' | rabbit_types:error(any()) | rabbit_types:ok(pid()))). -spec(update/0 :: () -> 'ok'). -spec(get_total_memory/0 :: () -> (non_neg_integer() | 'unknown')). -spec(get_vm_limit/0 :: () -> (non_neg_integer() | 'unknown')). diff --git a/src/worker_pool.erl b/src/worker_pool.erl index cc2658d9..a1e94fa8 100644 --- a/src/worker_pool.erl +++ b/src/worker_pool.erl @@ -52,7 +52,7 @@ -ifdef(use_specs). --spec(start_link/0 :: () -> {'ok', pid()} | 'ignore' | rabbit_types:error(any())). +-spec(start_link/0 :: () -> rabbit_types:ok(pid()) | 'ignore' | rabbit_types:error(any())). -spec(submit/1 :: (fun (() -> A) | {atom(), atom(), [any()]}) -> A). -spec(submit_async/1 :: (fun (() -> any()) | {atom(), atom(), [any()]}) -> 'ok'). diff --git a/src/worker_pool_sup.erl b/src/worker_pool_sup.erl index dbffff10..3d9d5b16 100644 --- a/src/worker_pool_sup.erl +++ b/src/worker_pool_sup.erl @@ -41,9 +41,9 @@ -ifdef(use_specs). --spec(start_link/0 :: () -> {'ok', pid()} | 'ignore' | rabbit_types:error(any())). +-spec(start_link/0 :: () -> rabbit_types:ok(pid()) | 'ignore' | rabbit_types:error(any())). -spec(start_link/1 :: - (non_neg_integer()) -> {'ok', pid()} | 'ignore' | rabbit_types:error(any())). + (non_neg_integer()) -> rabbit_types:ok(pid()) | 'ignore' | rabbit_types:error(any())). -endif. -- cgit v1.2.1 From 48f266120343484064adb51385a70b15eefcd275 Mon Sep 17 00:00:00 2001 From: Alexandru Scvortov Date: Tue, 6 Jul 2010 12:18:16 +0100 Subject: refactored r types and specs --- src/rabbit_misc.erl | 13 ++++++------- src/rabbit_types.erl | 11 +++++++---- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/rabbit_misc.erl b/src/rabbit_misc.erl index 0133b9cf..1940ab65 100644 --- a/src/rabbit_misc.erl +++ b/src/rabbit_misc.erl @@ -75,8 +75,8 @@ -export_type([resource_name/0]). -type(ok_or_error() :: rabbit_types:ok_or_error(any())). --type(resource_name() :: binary()). -type(thunk(T) :: fun(() -> T)). +-type(resource_name() :: binary()). -spec(method_record_type/1 :: (rabbit_framing:amqp_method_record()) -> rabbit_framing:amqp_method_name()). @@ -97,13 +97,12 @@ -spec(get_config/2 :: (atom(), A) -> A). -spec(set_config/2 :: (atom(), any()) -> 'ok'). -spec(dirty_read/1 :: ({atom(), any()}) -> rabbit_types:ok(any()) | rabbit_types:error('not_found')). --spec(r/3 :: (rabbit_types:vhost() | rabbit_types:r(atom()), K, resource_name()) - -> rabbit_types:r(K) when is_subtype(K, atom())). -spec(r/2 :: (rabbit_types:vhost(), K) - -> #resource{virtual_host :: rabbit_types:vhost(), - kind :: K, - name :: '_'} - when is_subtype(K, atom())). + -> rabbit_types:r(rabbit_types:vhost(), K) + when is_subtype(K, atom())). +-spec(r/3 :: (rabbit_types:vhost() | rabbit_types:r(atom()), K, resource_name()) + -> rabbit_types:r(rabbit_types:vhost(), K, resource_name()) + when is_subtype(K, atom())). -spec(r_arg/4 :: (rabbit_types:vhost() | rabbit_types:r(atom()), K, rabbit_framing:amqp_table(), binary()) -> undefined | rabbit_types:r(K) when is_subtype(K, atom())). diff --git a/src/rabbit_types.erl b/src/rabbit_types.erl index e42c6b44..212ae840 100644 --- a/src/rabbit_types.erl +++ b/src/rabbit_types.erl @@ -38,7 +38,7 @@ -export_type([txn/0, maybe/1, info/0, info_key/0, message/0, basic_message/0, delivery/0, content/0, decoded_content/0, undecoded_content/0, unencoded_content/0, encoded_content/0, vhost/0, ctag/0, amqp_error/0, - r/1, ssl_socket/0, listener/0, binding/0, amqqueue/0, + r/1, r/2, r/3, ssl_socket/0, listener/0, binding/0, amqqueue/0, exchange/0, connection/0, user/0, error/1, ok_or_error/1, ok/1]). -type(maybe(T) :: T | 'none'). @@ -92,10 +92,13 @@ #amqp_error{name :: rabbit_framing:amqp_exception(), explanation :: string(), method :: rabbit_framing:amqp_method_name()}). --type(r(Kind) :: - #resource{virtual_host :: rabbit_types:vhost(), + +-type(r(Kind) :: r(vhost(), Kind, rabbit_misc:resource_name())). +-type(r(VirtualHost, Kind) :: r(VirtualHost, Kind, rabbit_misc:resource_name())). +-type(r(VirtualHost, Kind, Name) :: + #resource{virtual_host :: VirtualHost, kind :: Kind, - name :: rabbit_misc:resource_name()}). + name :: Name}). -type(ssl_socket() :: #ssl_socket{}). -- cgit v1.2.1 From c597ef32fc23b3fe381192eb619e35312db1d768 Mon Sep 17 00:00:00 2001 From: Alexandru Scvortov Date: Tue, 6 Jul 2010 12:35:16 +0100 Subject: dialyzer doesn't support overloaded types --- src/rabbit_misc.erl | 4 ++-- src/rabbit_types.erl | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/rabbit_misc.erl b/src/rabbit_misc.erl index 1940ab65..0512591c 100644 --- a/src/rabbit_misc.erl +++ b/src/rabbit_misc.erl @@ -98,10 +98,10 @@ -spec(set_config/2 :: (atom(), any()) -> 'ok'). -spec(dirty_read/1 :: ({atom(), any()}) -> rabbit_types:ok(any()) | rabbit_types:error('not_found')). -spec(r/2 :: (rabbit_types:vhost(), K) - -> rabbit_types:r(rabbit_types:vhost(), K) + -> rabbit_types:r2(rabbit_types:vhost(), K) when is_subtype(K, atom())). -spec(r/3 :: (rabbit_types:vhost() | rabbit_types:r(atom()), K, resource_name()) - -> rabbit_types:r(rabbit_types:vhost(), K, resource_name()) + -> rabbit_types:r3(rabbit_types:vhost(), K, resource_name()) when is_subtype(K, atom())). -spec(r_arg/4 :: (rabbit_types:vhost() | rabbit_types:r(atom()), K, rabbit_framing:amqp_table(), binary()) diff --git a/src/rabbit_types.erl b/src/rabbit_types.erl index 212ae840..8baef98c 100644 --- a/src/rabbit_types.erl +++ b/src/rabbit_types.erl @@ -38,7 +38,7 @@ -export_type([txn/0, maybe/1, info/0, info_key/0, message/0, basic_message/0, delivery/0, content/0, decoded_content/0, undecoded_content/0, unencoded_content/0, encoded_content/0, vhost/0, ctag/0, amqp_error/0, - r/1, r/2, r/3, ssl_socket/0, listener/0, binding/0, amqqueue/0, + r/1, r2/2, r3/3, ssl_socket/0, listener/0, binding/0, amqqueue/0, exchange/0, connection/0, user/0, error/1, ok_or_error/1, ok/1]). -type(maybe(T) :: T | 'none'). @@ -93,9 +93,9 @@ explanation :: string(), method :: rabbit_framing:amqp_method_name()}). --type(r(Kind) :: r(vhost(), Kind, rabbit_misc:resource_name())). --type(r(VirtualHost, Kind) :: r(VirtualHost, Kind, rabbit_misc:resource_name())). --type(r(VirtualHost, Kind, Name) :: +-type(r(Kind) :: r2(vhost(), Kind)). +-type(r2(VirtualHost, Kind) :: r3(VirtualHost, Kind, rabbit_misc:resource_name())). +-type(r3(VirtualHost, Kind, Name) :: #resource{virtual_host :: VirtualHost, kind :: Kind, name :: Name}). -- cgit v1.2.1 From d0a64ac6a7d82c4512e0926a54cdc41c8dfe4e71 Mon Sep 17 00:00:00 2001 From: Alexandru Scvortov Date: Tue, 6 Jul 2010 12:35:58 +0100 Subject: removed line at top of rabbit_mnesia.erl --- src/rabbit_mnesia.erl | 1 - 1 file changed, 1 deletion(-) diff --git a/src/rabbit_mnesia.erl b/src/rabbit_mnesia.erl index c8e58df4..20b08eb3 100644 --- a/src/rabbit_mnesia.erl +++ b/src/rabbit_mnesia.erl @@ -1,4 +1,3 @@ - %% 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 -- cgit v1.2.1 From 59765b71999e62a394f45d5b4b0ad5cb53812b64 Mon Sep 17 00:00:00 2001 From: Alexandru Scvortov Date: Tue, 6 Jul 2010 13:16:38 +0100 Subject: cleanup --- src/delegate.erl | 3 +- src/delegate_sup.erl | 3 +- src/file_handle_cache.erl | 9 ++--- src/gen_server2.erl | 2 +- src/pg_local.erl | 7 ++-- src/rabbit.erl | 11 +++--- src/rabbit_access_control.erl | 16 +++++---- src/rabbit_amqqueue.erl | 64 ++++++++++++++++++++++------------ src/rabbit_amqqueue_process.erl | 2 +- src/rabbit_basic.erl | 49 ++++++++++++++++---------- src/rabbit_binary_generator.erl | 13 ++++--- src/rabbit_channel.erl | 8 +++-- src/rabbit_dialyzer.erl | 3 +- src/rabbit_error_logger.erl | 3 +- src/rabbit_error_logger_file_h.erl | 3 +- src/rabbit_exchange.erl | 50 ++++++++++++++++----------- src/rabbit_exchange_type_fanout.erl | 4 +-- src/rabbit_exchange_type_headers.erl | 4 +-- src/rabbit_exchange_type_registry.erl | 14 +++++--- src/rabbit_exchange_type_topic.erl | 6 ++-- src/rabbit_guid.erl | 7 ++-- src/rabbit_log.erl | 3 +- src/rabbit_memory_monitor.erl | 7 ++-- src/rabbit_misc.erl | 65 ++++++++++++++++++++++------------- src/rabbit_mnesia.erl | 1 + src/rabbit_net.erl | 28 ++++++++++----- src/rabbit_networking.erl | 14 +++++--- src/rabbit_persister.erl | 18 ++++++---- src/rabbit_router.erl | 3 +- src/rabbit_sasl_report_file_h.erl | 3 +- src/rabbit_types.erl | 27 ++++++++------- src/rabbit_writer.erl | 27 ++++++++++----- src/supervisor2.erl | 8 ++--- src/vm_memory_monitor.erl | 6 ++-- src/worker_pool.erl | 3 +- src/worker_pool_sup.erl | 6 ++-- src/worker_pool_worker.erl | 3 +- 37 files changed, 315 insertions(+), 188 deletions(-) diff --git a/src/delegate.erl b/src/delegate.erl index c2185e06..3f57953b 100644 --- a/src/delegate.erl +++ b/src/delegate.erl @@ -45,7 +45,8 @@ -ifdef(use_specs). -spec(start_link/1 :: (non_neg_integer()) -> rabbit_types:ok(pid())). --spec(invoke_no_result/2 :: (pid() | [pid()], fun ((pid()) -> any())) -> 'ok'). +-spec(invoke_no_result/2 :: + (pid() | [pid()], fun ((pid()) -> any())) -> 'ok'). -spec(invoke/2 :: (pid() | [pid()], fun ((pid()) -> A)) -> A). -spec(process_count/0 :: () -> non_neg_integer()). diff --git a/src/delegate_sup.erl b/src/delegate_sup.erl index 9a308eb1..b5274d5d 100644 --- a/src/delegate_sup.erl +++ b/src/delegate_sup.erl @@ -43,7 +43,8 @@ -ifdef(use_specs). --spec(start_link/0 :: () -> rabbit_types:ok(pid()) | 'ignore' | rabbit_types:error(any())). +-spec(start_link/0 :: + () -> rabbit_types:ok(pid()) | 'ignore' | rabbit_types:error(any())). -endif. diff --git a/src/file_handle_cache.erl b/src/file_handle_cache.erl index 790c1e08..1f54af57 100644 --- a/src/file_handle_cache.erl +++ b/src/file_handle_cache.erl @@ -185,14 +185,15 @@ -type(ok_or_error() :: rabbit_types:ok_or_error(any())). -type(val_or_error(T) :: (rabbit_types:ok(T) | rabbit_types:error(any()))). -type(position() :: ('bof' | 'eof' | non_neg_integer() | - {('bof' |'eof'), non_neg_integer()} | {'cur', integer()})). + {('bof' |'eof'), non_neg_integer()} | + {'cur', integer()})). -type(offset() :: non_neg_integer()). -spec(register_callback/3 :: (atom(), atom(), [any()]) -> 'ok'). -spec(open/3 :: - (string(), [any()], - [{'write_buffer', (non_neg_integer() | 'infinity' | 'unbuffered')}]) -> - val_or_error(ref())). + (string(), [any()], + [{'write_buffer', (non_neg_integer() | 'infinity' | 'unbuffered')}]) + -> val_or_error(ref())). -spec(close/1 :: (ref()) -> ok_or_error()). -spec(read/2 :: (ref(), non_neg_integer()) -> val_or_error([char()] | binary()) | 'eof'). diff --git a/src/gen_server2.erl b/src/gen_server2.erl index 547f0a42..49ae63c1 100644 --- a/src/gen_server2.erl +++ b/src/gen_server2.erl @@ -186,7 +186,7 @@ -ifdef(use_specs). -spec(handle_common_termination/6 :: - (any(), any(), any(), atom(), any(), any()) -> no_return()). + (any(), any(), any(), atom(), any(), any()) -> no_return()). -spec(hibernate/7 :: (pid(), any(), any(), atom(), any(), queue(), any()) -> no_return()). diff --git a/src/pg_local.erl b/src/pg_local.erl index a316e1e0..c9b677cc 100644 --- a/src/pg_local.erl +++ b/src/pg_local.erl @@ -36,8 +36,8 @@ -export([join/2, leave/2, get_members/1]). -export([sync/0]). %% intended for testing only; not part of official API --export([start/0,start_link/0,init/1,handle_call/3,handle_cast/2,handle_info/2, - terminate/2]). +-export([start/0, start_link/0, init/1, handle_call/3, handle_cast/2, + handle_info/2, terminate/2]). %%---------------------------------------------------------------------------- @@ -45,7 +45,8 @@ -type(name() :: term()). --spec(start_link/0 :: () -> rabbit_types:ok(pid()) | rabbit_types:error(term())). +-spec(start_link/0 :: + () -> rabbit_types:ok(pid()) | rabbit_types:error(term())). -spec(start/0 :: () -> rabbit_types:ok(pid()) | rabbit_types:error(term())). -spec(join/2 :: (name(), pid()) -> 'ok'). -spec(leave/2 :: (name(), pid()) -> 'ok'). diff --git a/src/rabbit.erl b/src/rabbit.erl index ec2dba46..18045b94 100644 --- a/src/rabbit.erl +++ b/src/rabbit.erl @@ -33,7 +33,8 @@ -behaviour(application). --export([prepare/0, start/0, stop/0, stop_and_halt/0, status/0, rotate_logs/1]). +-export([prepare/0, start/0, stop/0, stop_and_halt/0, status/0, + rotate_logs/1]). -export([start/2, stop/1]). @@ -192,10 +193,10 @@ -spec(stop/0 :: () -> 'ok'). -spec(stop_and_halt/0 :: () -> 'ok'). -spec(rotate_logs/1 :: (file_suffix()) -> rabbit_types:ok_or_error(any())). --spec(status/0 :: () -> - [{running_applications, [{atom(), string(), string()}]} | - {nodes, [{rabbit_mnesia:node_type(), [node()]}]} | - {running_nodes, [node()]}]). +-spec(status/0 :: + () -> [{running_applications, [{atom(), string(), string()}]} | + {nodes, [{rabbit_mnesia:node_type(), [node()]}]} | + {running_nodes, [node()]}]). -spec(log_location/1 :: ('sasl' | 'kernel') -> log_location()). -endif. diff --git a/src/rabbit_access_control.erl b/src/rabbit_access_control.erl index 4b068447..7d1839bb 100644 --- a/src/rabbit_access_control.erl +++ b/src/rabbit_access_control.erl @@ -54,15 +54,17 @@ -spec(check_login/2 :: (binary(), binary()) -> rabbit_types:user()). -spec(user_pass_login/2 :: (username(), password()) -> rabbit_types:user()). --spec(check_vhost_access/2 :: (rabbit_types:user(), rabbit_types:vhost()) -> 'ok'). +-spec(check_vhost_access/2 :: + (rabbit_types:user(), rabbit_types:vhost()) -> 'ok'). -spec(check_resource_access/3 :: - (username(), rabbit_misc:types(atom()), permission_atom()) -> 'ok'). + (username(), rabbit_types:r(atom()), permission_atom()) -> 'ok'). -spec(add_user/2 :: (username(), password()) -> 'ok'). -spec(delete_user/1 :: (username()) -> 'ok'). -spec(change_password/2 :: (username(), password()) -> 'ok'). -spec(list_users/0 :: () -> [username()]). --spec(lookup_user/1 :: (username()) -> - rabbit_types:ok(rabbit_types:user()) | rabbit_types:error('not_found')). +-spec(lookup_user/1 :: + (username()) -> rabbit_types:ok(rabbit_types:user()) + | rabbit_types:error('not_found')). -spec(add_vhost/1 :: (rabbit_types:vhost()) -> 'ok'). -spec(delete_vhost/1 :: (rabbit_types:vhost()) -> 'ok'). -spec(list_vhosts/0 :: () -> [rabbit_types:vhost()]). @@ -70,9 +72,11 @@ regexp(), regexp()) -> 'ok'). -spec(clear_permissions/2 :: (username(), rabbit_types:vhost()) -> 'ok'). -spec(list_vhost_permissions/1 :: - (rabbit_types:vhost()) -> [{username(), regexp(), regexp(), regexp()}]). + (rabbit_types:vhost()) + -> [{username(), regexp(), regexp(), regexp()}]). -spec(list_user_permissions/1 :: - (username()) -> [{rabbit_types:vhost(), regexp(), regexp(), regexp()}]). + (username()) + -> [{rabbit_types:vhost(), regexp(), regexp(), regexp()}]). -endif. diff --git a/src/rabbit_amqqueue.erl b/src/rabbit_amqqueue.erl index 169acd80..8caf1ace 100644 --- a/src/rabbit_amqqueue.erl +++ b/src/rabbit_amqqueue.erl @@ -71,40 +71,56 @@ 'ok' | {'error', [{'error' | 'exit' | 'throw', any()}]}). -spec(start/0 :: () -> 'ok'). --spec(declare/5 :: (name(), boolean(), boolean(), rabbit_framing:amqp_table(), - rabbit_types:maybe(pid())) -> {'new' | 'existing', rabbit_types:amqqueue()}). --spec(lookup/1 :: (name()) -> rabbit_types:ok(rabbit_types:amqqueue()) | rabbit_types:error('not_found')). +-spec(declare/5 :: + (name(), boolean(), boolean(), + rabbit_framing:amqp_table(), rabbit_types:maybe(pid())) + -> {'new' | 'existing', rabbit_types:amqqueue()}). +-spec(lookup/1 :: + (name()) -> rabbit_types:ok(rabbit_types:amqqueue()) | + rabbit_types:error('not_found')). -spec(with/2 :: (name(), qfun(A)) -> A | rabbit_types:error('not_found')). -spec(with_or_die/2 :: (name(), qfun(A)) -> A). --spec(assert_equivalence/5 :: (rabbit_types:amqqueue(), boolean(), boolean(), - rabbit_framing:amqp_table(), rabbit_types:maybe(pid)) - -> ok). +-spec(assert_equivalence/5 :: + (rabbit_types:amqqueue(), boolean(), boolean(), + rabbit_framing:amqp_table(), rabbit_types:maybe(pid)) + -> ok). -spec(check_exclusive_access/2 :: (rabbit_types:amqqueue(), pid()) -> 'ok'). -spec(with_exclusive_access_or_die/3 :: (name(), pid(), qfun(A)) -> A). -spec(list/1 :: (rabbit_types:vhost()) -> [rabbit_types:amqqueue()]). -spec(info_keys/0 :: () -> [rabbit_types:info_key()]). -spec(info/1 :: (rabbit_types:amqqueue()) -> [rabbit_types:info()]). --spec(info/2 :: (rabbit_types:amqqueue(), [rabbit_types:info_key()]) -> [rabbit_types:info()]). +-spec(info/2 :: + (rabbit_types:amqqueue(), [rabbit_types:info_key()]) + -> [rabbit_types:info()]). -spec(info_all/1 :: (rabbit_types:vhost()) -> [[rabbit_types:info()]]). -spec(info_all/2 :: (rabbit_types:vhost(), [rabbit_types:info_key()]) -> [[rabbit_types:info()]]). --spec(consumers/1 :: (rabbit_types:amqqueue()) -> [{pid(), rabbit_types:ctag(), boolean()}]). --spec(consumers_all/1 :: (rabbit_types:vhost()) - -> [{name(), pid(), rabbit_types:ctag(), boolean()}]). +-spec(consumers/1 :: + (rabbit_types:amqqueue()) + -> [{pid(), rabbit_types:ctag(), boolean()}]). +-spec(consumers_all/1 :: + (rabbit_types:vhost()) + -> [{name(), pid(), rabbit_types:ctag(), boolean()}]). -spec(stat/1 :: - (rabbit_types:amqqueue()) -> {'ok', non_neg_integer(), non_neg_integer()}). + (rabbit_types:amqqueue()) + -> {'ok', non_neg_integer(), non_neg_integer()}). -spec(delete/3 :: - (rabbit_types:amqqueue(), 'false', 'false') -> qlen(); - (rabbit_types:amqqueue(), 'true' , 'false') -> qlen() | rabbit_types:error('in_use'); - (rabbit_types:amqqueue(), 'false', 'true' ) -> qlen() | rabbit_types:error('not_empty'); - (rabbit_types:amqqueue(), 'true' , 'true' ) -> qlen() | - rabbit_types:error('in_use') | - rabbit_types:error('not_empty')). + (rabbit_types:amqqueue(), 'false', 'false') + -> qlen(); + (rabbit_types:amqqueue(), 'true' , 'false') + -> qlen() | rabbit_types:error('in_use'); + (rabbit_types:amqqueue(), 'false', 'true' ) + -> qlen() | rabbit_types:error('not_empty'); + (rabbit_types:amqqueue(), 'true' , 'true' ) + -> qlen() | + rabbit_types:error('in_use') | + rabbit_types:error('not_empty')). -spec(purge/1 :: (rabbit_types:amqqueue()) -> qlen()). -spec(deliver/2 :: (pid(), rabbit_types:delivery()) -> boolean()). -spec(requeue/3 :: (pid(), [msg_id()], pid()) -> 'ok'). --spec(ack/4 :: (pid(), rabbit_types:maybe(rabbit_types:txn()), [msg_id()], pid()) - -> 'ok'). +-spec(ack/4 :: + (pid(), rabbit_types:maybe(rabbit_types:txn()), [msg_id()], pid()) + -> 'ok'). -spec(commit_all/3 :: ([pid()], rabbit_types:txn(), pid()) -> ok_or_errors()). -spec(rollback_all/3 :: ([pid()], rabbit_types:txn(), pid()) -> 'ok'). -spec(notify_down_all/2 :: ([pid()], pid()) -> ok_or_errors()). @@ -115,13 +131,17 @@ (rabbit_types:amqqueue(), boolean(), pid(), pid() | 'undefined', rabbit_types:ctag(), boolean(), any()) -> rabbit_types:ok_or_error('exclusive_consume_unavailable')). --spec(basic_cancel/4 :: (rabbit_types:amqqueue(), pid(), rabbit_types:ctag(), any()) -> 'ok'). +-spec(basic_cancel/4 :: + (rabbit_types:amqqueue(), pid(), rabbit_types:ctag(), any()) -> 'ok'). -spec(notify_sent/2 :: (pid(), pid()) -> 'ok'). -spec(unblock/2 :: (pid(), pid()) -> 'ok'). -spec(flush_all/2 :: ([pid()], pid()) -> 'ok'). --spec(internal_declare/2 :: (rabbit_types:amqqueue(), boolean()) -> rabbit_types:amqqueue() | 'not_found'). +-spec(internal_declare/2 :: + (rabbit_types:amqqueue(), boolean()) + -> rabbit_types:amqqueue() | 'not_found'). -spec(internal_delete/1 :: (name()) -> rabbit_types:ok_or_error('not_found')). --spec(maybe_run_queue_via_backing_queue/2 :: (pid(), (fun ((A) -> A))) -> 'ok'). +-spec(maybe_run_queue_via_backing_queue/2 :: + (pid(), (fun ((A) -> A))) -> 'ok'). -spec(update_ram_duration/1 :: (pid()) -> 'ok'). -spec(set_ram_duration_target/2 :: (pid(), number() | 'infinity') -> 'ok'). -spec(set_maximum_since_use/2 :: (pid(), non_neg_integer()) -> 'ok'). diff --git a/src/rabbit_amqqueue_process.erl b/src/rabbit_amqqueue_process.erl index 3bf48b4c..2fb60e96 100644 --- a/src/rabbit_amqqueue_process.erl +++ b/src/rabbit_amqqueue_process.erl @@ -35,7 +35,7 @@ -behaviour(gen_server2). --define(UNSENT_MESSAGE_LIMIT, 100). +-define(UNSENT_MESSAGE_LIMIT, 100). -define(SYNC_INTERVAL, 5). %% milliseconds -define(RAM_DURATION_UPDATE_INTERVAL, 5000). diff --git a/src/rabbit_basic.erl b/src/rabbit_basic.erl index 5d50f5c2..03a19961 100644 --- a/src/rabbit_basic.erl +++ b/src/rabbit_basic.erl @@ -42,28 +42,41 @@ -ifdef(use_specs). --type(properties_input() :: (rabbit_framing:amqp_property_record() | [{atom(), any()}])). --type(publish_result() :: ({ok, rabbit_router:routing_result(), [pid()]} - | rabbit_types:error('not_found'))). +-type(properties_input() :: + (rabbit_framing:amqp_property_record() | [{atom(), any()}])). +-type(publish_result() :: + ({ok, rabbit_router:routing_result(), [pid()]} + | rabbit_types:error('not_found'))). -spec(publish/1 :: (rabbit_types:delivery()) -> publish_result()). --spec(delivery/4 :: (boolean(), boolean(), rabbit_types:maybe(rabbit_types:txn()), - rabbit_types:message()) -> rabbit_types:delivery()). --spec(message/4 :: (rabbit_exchange:name(), rabbit_router:routing_key(), - properties_input(), binary()) - -> (rabbit_types:message() | rabbit_types:error(any()))). --spec(properties/1 :: (properties_input()) -> rabbit_framing:amqp_property_record()). --spec(publish/4 :: (rabbit_exchange:name(), rabbit_router:routing_key(), - properties_input(), binary()) -> publish_result()). --spec(publish/7 :: (rabbit_exchange:name(), rabbit_router:routing_key(), boolean(), boolean(), - rabbit_types:maybe(rabbit_types:txn()), properties_input(), binary()) -> - publish_result()). +-spec(delivery/4 :: + (boolean(), boolean(), rabbit_types:maybe(rabbit_types:txn()), + rabbit_types:message()) + -> rabbit_types:delivery()). +-spec(message/4 :: + (rabbit_exchange:name(), rabbit_router:routing_key(), + properties_input(), binary()) + -> (rabbit_types:message() | rabbit_types:error(any()))). +-spec(properties/1 :: + (properties_input()) -> rabbit_framing:amqp_property_record()). +-spec(publish/4 :: + (rabbit_exchange:name(), rabbit_router:routing_key(), + properties_input(), binary()) + -> publish_result()). +-spec(publish/7 :: + (rabbit_exchange:name(), rabbit_router:routing_key(), + boolean(), boolean(), rabbit_types:maybe(rabbit_types:txn()), + properties_input(), binary()) + -> publish_result()). -spec(build_content/2 :: - (rabbit_framing:amqp_property_record(), binary()) -> rabbit_types:content()). --spec(from_content/1 :: (rabbit_types:content()) - -> {rabbit_framing:amqp_property_record(), binary()}). + (rabbit_framing:amqp_property_record(), binary()) + -> rabbit_types:content()). +-spec(from_content/1 :: + (rabbit_types:content()) + -> {rabbit_framing:amqp_property_record(), binary()}). -spec(is_message_persistent/1 :: - (rabbit_types:decoded_content()) -> (boolean() | {'invalid', non_neg_integer()})). + (rabbit_types:decoded_content()) + -> (boolean() | {'invalid', non_neg_integer()})). -endif. diff --git a/src/rabbit_binary_generator.erl b/src/rabbit_binary_generator.erl index 7b43a6a7..0e6ebe57 100644 --- a/src/rabbit_binary_generator.erl +++ b/src/rabbit_binary_generator.erl @@ -60,15 +60,18 @@ (rabbit_channel:channel_number(), rabbit_framing:amqp_method_record()) -> frame()). -spec(build_simple_content_frames/3 :: - (rabbit_channel:channel_number(), rabbit_types:content(), non_neg_integer()) + (rabbit_channel:channel_number(), rabbit_types:content(), + non_neg_integer()) -> [frame()]). -spec(build_heartbeat_frame/0 :: () -> frame()). -spec(generate_table/1 :: (rabbit_framing:amqp_table()) -> binary()). --spec(encode_properties/2 :: ([rabbit_framing:amqp_property_type()], [any()]) - -> binary()). +-spec(encode_properties/2 :: + ([rabbit_framing:amqp_property_type()], [any()]) -> binary()). -spec(check_empty_content_body_frame_size/0 :: () -> 'ok'). --spec(ensure_content_encoded/1 :: (rabbit_types:content()) -> rabbit_types:encoded_content()). --spec(clear_encoded_content/1 :: (rabbit_types:content()) -> rabbit_types:unencoded_content()). +-spec(ensure_content_encoded/1 :: + (rabbit_types:content()) -> rabbit_types:encoded_content()). +-spec(clear_encoded_content/1 :: + (rabbit_types:content()) -> rabbit_types:unencoded_content()). -endif. diff --git a/src/rabbit_channel.erl b/src/rabbit_channel.erl index b5d4e2af..fbbc50b9 100644 --- a/src/rabbit_channel.erl +++ b/src/rabbit_channel.erl @@ -41,8 +41,8 @@ -export([flow_timeout/2]). --export([init/1, terminate/2, code_change/3, - handle_call/3, handle_cast/2, handle_info/2, handle_pre_hibernate/1]). +-export([init/1, terminate/2, code_change/3, handle_call/3, handle_cast/2, + handle_info/2, handle_pre_hibernate/1]). -record(ch, {state, channel, reader_pid, writer_pid, limiter_pid, transaction_id, tx_participants, next_tag, @@ -84,7 +84,9 @@ rabbit_types:maybe(rabbit_types:content())) -> 'ok'). -spec(shutdown/1 :: (pid()) -> 'ok'). -spec(send_command/2 :: (pid(), rabbit_framing:amqp_method()) -> 'ok'). --spec(deliver/4 ::(pid(), rabbit_types:ctag(), boolean(), rabbit_amqqueue:qmsg()) -> 'ok'). +-spec(deliver/4 :: + (pid(), rabbit_types:ctag(), boolean(), rabbit_amqqueue:qmsg()) + -> 'ok'). -spec(conserve_memory/2 :: (pid(), boolean()) -> 'ok'). -spec(flushed/2 :: (pid(), pid()) -> 'ok'). -spec(flow_timeout/2 :: (pid(), ref()) -> 'ok'). diff --git a/src/rabbit_dialyzer.erl b/src/rabbit_dialyzer.erl index 5805611f..51a376f6 100644 --- a/src/rabbit_dialyzer.erl +++ b/src/rabbit_dialyzer.erl @@ -32,7 +32,8 @@ -module(rabbit_dialyzer). -include("rabbit.hrl"). --export([create_basic_plt/1, add_to_plt/2, dialyze_files/2, halt_with_code/1]). +-export([create_basic_plt/1, add_to_plt/2, dialyze_files/2, + halt_with_code/1]). %%---------------------------------------------------------------------------- diff --git a/src/rabbit_error_logger.erl b/src/rabbit_error_logger.erl index e9baf2c4..42861f86 100644 --- a/src/rabbit_error_logger.erl +++ b/src/rabbit_error_logger.erl @@ -39,7 +39,8 @@ -export([boot/0]). --export([init/1, terminate/2, code_change/3, handle_call/2, handle_event/2, handle_info/2]). +-export([init/1, terminate/2, code_change/3, handle_call/2, handle_event/2, + handle_info/2]). boot() -> {ok, DefaultVHost} = application:get_env(default_vhost), diff --git a/src/rabbit_error_logger_file_h.erl b/src/rabbit_error_logger_file_h.erl index 45b66712..875d680f 100644 --- a/src/rabbit_error_logger_file_h.erl +++ b/src/rabbit_error_logger_file_h.erl @@ -33,7 +33,8 @@ -behaviour(gen_event). --export([init/1, handle_event/2, handle_call/2, handle_info/2, terminate/2, code_change/3]). +-export([init/1, handle_event/2, handle_call/2, handle_info/2, terminate/2, + code_change/3]). %% rabbit_error_logger_file_h is a wrapper around the error_logger_file_h %% module because the original's init/1 does not match properly diff --git a/src/rabbit_exchange.erl b/src/rabbit_exchange.erl index 024dccf0..9dca456d 100644 --- a/src/rabbit_exchange.erl +++ b/src/rabbit_exchange.erl @@ -33,9 +33,8 @@ -include("rabbit.hrl"). -include("rabbit_framing.hrl"). --export([recover/0, declare/5, lookup/1, lookup_or_die/1, - list/1, info_keys/0, info/1, info/2, info_all/1, info_all/2, - publish/2]). +-export([recover/0, declare/5, lookup/1, lookup_or_die/1, list/1, info_keys/0, + info/1, info/2, info_all/1, info_all/2, publish/2]). -export([add_binding/5, delete_binding/5, list_bindings/1]). -export([delete/2]). -export([delete_queue_bindings/1, delete_transient_queue_bindings/1]). @@ -68,44 +67,55 @@ -type(inner_fun() :: fun((rabbit_types:exchange(), queue()) -> any())). -spec(recover/0 :: () -> 'ok'). --spec(declare/5 :: (name(), type(), boolean(), boolean(), - rabbit_framing:amqp_table()) -> rabbit_types:exchange()). +-spec(declare/5 :: + (name(), type(), boolean(), boolean(), rabbit_framing:amqp_table()) + -> rabbit_types:exchange()). -spec(check_type/1 :: (binary()) -> atom()). --spec(assert_equivalence/5 :: (rabbit_types:exchange(), atom(), boolean(), boolean(), - rabbit_framing:amqp_table()) -> 'ok'). +-spec(assert_equivalence/5 :: + (rabbit_types:exchange(), atom(), boolean(), boolean(), + rabbit_framing:amqp_table()) + -> 'ok'). -spec(assert_args_equivalence/2 :: (rabbit_types:exchange(), rabbit_framing:amqp_table()) -> 'ok'). --spec(lookup/1 :: (name()) - -> rabbit_types:ok(rabbit_types:exchange()) | rabbit_types:error('not_found')). +-spec(lookup/1 :: + (name()) -> rabbit_types:ok(rabbit_types:exchange()) | + rabbit_types:error('not_found')). -spec(lookup_or_die/1 :: (name()) -> rabbit_types:exchange()). -spec(list/1 :: (rabbit_types:vhost()) -> [rabbit_types:exchange()]). -spec(info_keys/0 :: () -> [rabbit_types:info_key()]). -spec(info/1 :: (rabbit_types:exchange()) -> [rabbit_types:info()]). --spec(info/2 :: (rabbit_types:exchange(), [rabbit_types:info_key()]) -> [rabbit_types:info()]). +-spec(info/2 :: + (rabbit_types:exchange(), [rabbit_types:info_key()]) + -> [rabbit_types:info()]). -spec(info_all/1 :: (rabbit_types:vhost()) -> [[rabbit_types:info()]]). --spec(info_all/2 :: (rabbit_types:vhost(), [rabbit_types:info_key()]) +-spec(info_all/2 ::(rabbit_types:vhost(), [rabbit_types:info_key()]) -> [[rabbit_types:info()]]). -spec(publish/2 :: (rabbit_types:exchange(), rabbit_types:delivery()) -> {rabbit_router:routing_result(), [pid()]}). -spec(add_binding/5 :: (name(), rabbit_amqqueue:name(), rabbit_router:routing_key(), - rabbit_framing:amqp_table(), inner_fun()) -> bind_res()). + rabbit_framing:amqp_table(), inner_fun()) + -> bind_res()). -spec(delete_binding/5 :: (name(), rabbit_amqqueue:name(), rabbit_router:routing_key(), rabbit_framing:amqp_table(), inner_fun()) -> bind_res() | rabbit_types:error('binding_not_found')). --spec(list_bindings/1 :: (rabbit_types:vhost()) -> - [{name(), rabbit_amqqueue:name(), - rabbit_router:routing_key(), rabbit_framing:amqp_table()}]). +-spec(list_bindings/1 :: + (rabbit_types:vhost()) + -> [{name(), rabbit_amqqueue:name(), rabbit_router:routing_key(), + rabbit_framing:amqp_table()}]). -spec(delete_queue_bindings/1 :: (rabbit_amqqueue:name()) -> fun (() -> none())). --spec(delete_transient_queue_bindings/1 :: (rabbit_amqqueue:name()) -> - fun (() -> none())). --spec(delete/2 :: (name(), boolean()) -> - 'ok' | rabbit_types:error('not_found') | rabbit_types:error('in_use')). +-spec(delete_transient_queue_bindings/1 :: + (rabbit_amqqueue:name()) -> fun (() -> none())). +-spec(delete/2 :: + (name(), boolean())-> 'ok' | + rabbit_types:error('not_found') | + rabbit_types:error('in_use')). -spec(list_queue_bindings/1 :: (rabbit_amqqueue:name()) - -> [{name(), rabbit_router:routing_key(), rabbit_framing:amqp_table()}]). + -> [{name(), rabbit_router:routing_key(), + rabbit_framing:amqp_table()}]). -spec(list_exchange_bindings/1 :: (name()) -> [{rabbit_amqqueue:name(), rabbit_router:routing_key(), rabbit_framing:amqp_table()}]). diff --git a/src/rabbit_exchange_type_fanout.erl b/src/rabbit_exchange_type_fanout.erl index 4f9712b1..94798c78 100644 --- a/src/rabbit_exchange_type_fanout.erl +++ b/src/rabbit_exchange_type_fanout.erl @@ -35,8 +35,8 @@ -behaviour(rabbit_exchange_type). -export([description/0, publish/2]). --export([validate/1, create/1, recover/2, delete/2, - add_binding/2, remove_bindings/2, assert_args_equivalence/2]). +-export([validate/1, create/1, recover/2, delete/2, add_binding/2, + remove_bindings/2, assert_args_equivalence/2]). -include("rabbit_exchange_type_spec.hrl"). -rabbit_boot_step({?MODULE, diff --git a/src/rabbit_exchange_type_headers.erl b/src/rabbit_exchange_type_headers.erl index c748c364..44607398 100644 --- a/src/rabbit_exchange_type_headers.erl +++ b/src/rabbit_exchange_type_headers.erl @@ -36,8 +36,8 @@ -behaviour(rabbit_exchange_type). -export([description/0, publish/2]). --export([validate/1, create/1, recover/2, delete/2, - add_binding/2, remove_bindings/2, assert_args_equivalence/2]). +-export([validate/1, create/1, recover/2, delete/2, add_binding/2, + remove_bindings/2, assert_args_equivalence/2]). -include("rabbit_exchange_type_spec.hrl"). -rabbit_boot_step({?MODULE, diff --git a/src/rabbit_exchange_type_registry.erl b/src/rabbit_exchange_type_registry.erl index 729ede3e..f6666211 100644 --- a/src/rabbit_exchange_type_registry.erl +++ b/src/rabbit_exchange_type_registry.erl @@ -35,8 +35,8 @@ -export([start_link/0]). --export([init/1, handle_call/3, handle_cast/2, handle_info/2, - terminate/2, code_change/3]). +-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]). @@ -45,10 +45,14 @@ -ifdef(use_specs). --spec(start_link/0 :: () -> 'ignore' | rabbit_types:error(term()) | rabbit_types:ok(pid())). +-spec(start_link/0 :: + () -> 'ignore' | rabbit_types:error(term()) | rabbit_types:ok(pid())). -spec(register/2 :: (binary(), atom()) -> 'ok'). --spec(binary_to_type/1 :: (binary()) -> atom() | rabbit_types:error('not_found')). --spec(lookup_module/1 :: (atom()) -> rabbit_types:ok(atom()) | rabbit_types:error('not_found')). +-spec(binary_to_type/1 :: + (binary()) -> atom() | rabbit_types:error('not_found')). +-spec(lookup_module/1 :: + (atom()) -> rabbit_types:ok(atom()) | + rabbit_types:error('not_found')). -endif. diff --git a/src/rabbit_exchange_type_topic.erl b/src/rabbit_exchange_type_topic.erl index 0e22d545..a374cfee 100644 --- a/src/rabbit_exchange_type_topic.erl +++ b/src/rabbit_exchange_type_topic.erl @@ -35,8 +35,8 @@ -behaviour(rabbit_exchange_type). -export([description/0, publish/2]). --export([validate/1, create/1, recover/2, delete/2, - add_binding/2, remove_bindings/2, assert_args_equivalence/2]). +-export([validate/1, create/1, recover/2, delete/2, add_binding/2, + remove_bindings/2, assert_args_equivalence/2]). -include("rabbit_exchange_type_spec.hrl"). -rabbit_boot_step({?MODULE, @@ -49,7 +49,9 @@ -export([topic_matches/2]). -ifdef(use_specs). + -spec(topic_matches/2 :: (binary(), binary()) -> boolean()). + -endif. description() -> diff --git a/src/rabbit_guid.erl b/src/rabbit_guid.erl index 45cbcc80..0cbd47d8 100644 --- a/src/rabbit_guid.erl +++ b/src/rabbit_guid.erl @@ -38,8 +38,8 @@ -export([start_link/0]). -export([guid/0, string_guid/1, binstring_guid/1]). --export([init/1, handle_call/3, handle_cast/2, handle_info/2, - terminate/2, code_change/3]). +-export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, + code_change/3]). -define(SERVER, ?MODULE). -define(SERIAL_FILENAME, "rabbit_serial"). @@ -54,7 +54,8 @@ -type(guid() :: binary()). --spec(start_link/0 :: () -> rabbit_types:ok(pid()) | 'ignore' | rabbit_types:error(any())). +-spec(start_link/0 :: + () -> rabbit_types:ok(pid()) | 'ignore' | rabbit_types:error(any())). -spec(guid/0 :: () -> guid()). -spec(string_guid/1 :: (any()) -> string()). -spec(binstring_guid/1 :: (any()) -> binary()). diff --git a/src/rabbit_log.erl b/src/rabbit_log.erl index 7beed2c0..157c879f 100644 --- a/src/rabbit_log.erl +++ b/src/rabbit_log.erl @@ -50,7 +50,8 @@ -ifdef(use_specs). --spec(start_link/0 :: () -> rabbit_types:ok(pid()) | 'ignore' | rabbit_types:error(any())). +-spec(start_link/0 :: + () -> rabbit_types:ok(pid()) | 'ignore' | rabbit_types:error(any())). -spec(debug/1 :: (string()) -> 'ok'). -spec(debug/2 :: (string(), [any()]) -> 'ok'). -spec(info/1 :: (string()) -> 'ok'). diff --git a/src/rabbit_memory_monitor.erl b/src/rabbit_memory_monitor.erl index 4c5695e9..c482ebec 100644 --- a/src/rabbit_memory_monitor.erl +++ b/src/rabbit_memory_monitor.erl @@ -86,12 +86,13 @@ -ifdef(use_specs). --spec(start_link/0 :: () -> 'ignore' | rabbit_types:error(any()) | rabbit_types:ok(pid())). +-spec(start_link/0 :: + () -> 'ignore' | rabbit_types:error(any()) | rabbit_types:ok(pid())). -spec(update/0 :: () -> 'ok'). -spec(register/2 :: (pid(), {atom(),atom(),[any()]}) -> 'ok'). -spec(deregister/1 :: (pid()) -> 'ok'). --spec(report_ram_duration/2 :: (pid(), float() | 'infinity') -> - number() | 'infinity'). +-spec(report_ram_duration/2 :: + (pid(), float() | 'infinity') -> number() | 'infinity'). -spec(stop/0 :: () -> 'ok'). -endif. diff --git a/src/rabbit_misc.erl b/src/rabbit_misc.erl index 0512591c..a46c7628 100644 --- a/src/rabbit_misc.erl +++ b/src/rabbit_misc.erl @@ -87,53 +87,67 @@ -> no_return()). -spec(amqp_error/4 :: (rabbit_framing:amqp_exception(), string(), [any()], - rabbit_framing:amqp_method_name()) -> rabbit_types:amqp_error()). + rabbit_framing:amqp_method_name()) + -> rabbit_types:amqp_error()). -spec(protocol_error/3 :: (rabbit_framing:amqp_exception(), string(), [any()]) -> no_return()). --spec(protocol_error/4 :: (rabbit_framing:amqp_exception(), string(), [any()], - rabbit_framing:amqp_method_name()) -> no_return()). +-spec(protocol_error/4 :: + (rabbit_framing:amqp_exception(), string(), [any()], + rabbit_framing:amqp_method_name()) + -> no_return()). -spec(not_found/1 :: (rabbit_types:r(atom())) -> no_return()). --spec(get_config/1 :: (atom()) -> rabbit_types:ok(any()) | rabbit_types:error('not_found')). +-spec(get_config/1 :: + (atom()) -> rabbit_types:ok(any()) | rabbit_types:error('not_found')). -spec(get_config/2 :: (atom(), A) -> A). -spec(set_config/2 :: (atom(), any()) -> 'ok'). --spec(dirty_read/1 :: ({atom(), any()}) -> rabbit_types:ok(any()) | rabbit_types:error('not_found')). +-spec(dirty_read/1 :: + ({atom(), any()}) + -> rabbit_types:ok(any()) | rabbit_types:error('not_found')). -spec(r/2 :: (rabbit_types:vhost(), K) - -> rabbit_types:r2(rabbit_types:vhost(), K) - when is_subtype(K, atom())). --spec(r/3 :: (rabbit_types:vhost() | rabbit_types:r(atom()), K, resource_name()) - -> rabbit_types:r3(rabbit_types:vhost(), K, resource_name()) + -> rabbit_types:r2(rabbit_types:vhost(), K, '_') when is_subtype(K, atom())). --spec(r_arg/4 :: (rabbit_types:vhost() | rabbit_types:r(atom()), K, - rabbit_framing:amqp_table(), binary()) - -> undefined | rabbit_types:r(K) when is_subtype(K, atom())). +-spec(r/3 :: + (rabbit_types:vhost() | rabbit_types:r(atom()), K, resource_name()) + -> rabbit_types:r3(rabbit_types:vhost(), K, resource_name()) + when is_subtype(K, atom())). +-spec(r_arg/4 :: + (rabbit_types:vhost() | rabbit_types:r(atom()), K, + rabbit_framing:amqp_table(), binary()) + -> undefined | rabbit_types:r(K) + when is_subtype(K, atom())). -spec(rs/1 :: (rabbit_types:r(atom())) -> string()). -spec(enable_cover/0 :: () -> ok_or_error()). -spec(start_cover/1 :: ([{string(), string()} | string()]) -> 'ok'). -spec(report_cover/0 :: () -> 'ok'). -spec(enable_cover/1 :: (file:filename()) -> ok_or_error()). -spec(report_cover/1 :: (file:filename()) -> 'ok'). --spec(throw_on_error/2 :: (atom(), thunk(rabbit_types:error(any()) | {ok, A} | A)) -> A). +-spec(throw_on_error/2 :: + (atom(), thunk(rabbit_types:error(any()) | {ok, A} | A)) -> A). -spec(with_exit_handler/2 :: (thunk(A), thunk(A)) -> A). -spec(filter_exit_map/2 :: (fun ((A) -> B), [A]) -> [B]). -spec(with_user/2 :: (rabbit_access_control:username(), thunk(A)) -> A). -spec(with_vhost/2 :: (rabbit_types:vhost(), thunk(A)) -> A). --spec(with_user_and_vhost/3 :: (rabbit_access_control:username(), - rabbit_types:vhost(), thunk(A)) -> A). +-spec(with_user_and_vhost/3 :: + (rabbit_access_control:username(), rabbit_types:vhost(), thunk(A)) + -> A). -spec(execute_mnesia_transaction/1 :: (thunk(A)) -> A). -spec(ensure_ok/2 :: (ok_or_error(), atom()) -> 'ok'). -spec(makenode/1 :: ({string(), string()} | string()) -> node()). -spec(nodeparts/1 :: (node() | string()) -> {string(), string()}). -spec(cookie_hash/0 :: () -> string()). --spec(tcp_name/3 :: (atom(), inet:ip_address(), rabbit_networking:ip_port()) -> atom()). +-spec(tcp_name/3 :: + (atom(), inet:ip_address(), rabbit_networking:ip_port()) + -> atom()). -spec(intersperse/2 :: (A, [A]) -> [A]). -spec(upmap/2 :: (fun ((A) -> B), [A]) -> [B]). -spec(map_in_order/2 :: (fun ((A) -> B), [A]) -> [B]). -spec(table_fold/3 :: (fun ((any(), A) -> A), A, atom()) -> A). -spec(dirty_read_all/1 :: (atom()) -> [any()]). --spec(dirty_foreach_key/2 :: (fun ((any()) -> any()), atom()) -> - 'ok' | 'aborted'). +-spec(dirty_foreach_key/2 :: (fun ((any()) -> any()), atom()) + -> 'ok' | 'aborted'). -spec(dirty_dump_log/1 :: (file:filename()) -> ok_or_error()). --spec(read_term_file/1 :: (file:filename()) -> {'ok', [any()]} | rabbit_types:error(any())). +-spec(read_term_file/1 :: + (file:filename()) -> {'ok', [any()]} | rabbit_types:error(any())). -spec(write_term_file/2 :: (file:filename(), [any()]) -> ok_or_error()). -spec(append_file/2 :: (file:filename(), string()) -> ok_or_error()). -spec(ensure_parent_dirs_exist/1 :: (string()) -> 'ok'). @@ -143,14 +157,17 @@ -spec(unfold/2 :: (fun ((A) -> ({'true', B, A} | 'false')), A) -> {[B], A}). -spec(ceil/1 :: (number()) -> integer()). -spec(queue_fold/3 :: (fun ((any(), B) -> B), B, queue()) -> B). --spec(sort_field_table/1 :: (rabbit_framing:amqp_table()) -> rabbit_framing:amqp_table()). +-spec(sort_field_table/1 :: + (rabbit_framing:amqp_table()) -> rabbit_framing:amqp_table()). -spec(pid_to_string/1 :: (pid()) -> string()). -spec(string_to_pid/1 :: (string()) -> pid()). -spec(version_compare/2 :: (string(), string()) -> 'lt' | 'eq' | 'gt'). --spec(version_compare/3 :: (string(), string(), - ('lt' | 'lte' | 'eq' | 'gte' | 'gt')) -> boolean()). --spec(recursive_delete/1 :: ([file:filename()]) -> - rabbit_types:ok_or_error({file:filename(), any()})). +-spec(version_compare/3 :: + (string(), string(), ('lt' | 'lte' | 'eq' | 'gte' | 'gt')) + -> boolean()). +-spec(recursive_delete/1 :: + ([file:filename()]) + -> rabbit_types:ok_or_error({file:filename(), any()})). -spec(dict_cons/3 :: (any(), any(), dict()) -> dict()). -spec(unlink_and_capture_exit/1 :: (pid()) -> 'ok'). diff --git a/src/rabbit_mnesia.erl b/src/rabbit_mnesia.erl index 20b08eb3..5c14ba7b 100644 --- a/src/rabbit_mnesia.erl +++ b/src/rabbit_mnesia.erl @@ -29,6 +29,7 @@ %% Contributor(s): ______________________________________. %% + -module(rabbit_mnesia). -export([ensure_mnesia_dir/0, dir/0, status/0, init/0, is_db_empty/0, diff --git a/src/rabbit_net.erl b/src/rabbit_net.erl index 20485bec..6baa4b88 100644 --- a/src/rabbit_net.erl +++ b/src/rabbit_net.erl @@ -40,23 +40,33 @@ -ifdef(use_specs). +-export_type([socket/0]). + -type(stat_option() :: 'recv_cnt' | 'recv_max' | 'recv_avg' | 'recv_oct' | 'recv_dvi' | 'send_cnt' | 'send_max' | 'send_avg' | 'send_oct' | 'send_pend'). -type(error() :: rabbit_types:error(any())). -type(socket() :: rabbit_networking:ip_port() | rabbit_types:ssl_socket()). --spec(async_recv/3 :: (socket(), integer(), timeout()) -> rabbit_types:ok(any())). +-spec(async_recv/3 :: + (socket(), integer(), timeout()) -> rabbit_types:ok(any())). -spec(close/1 :: (socket()) -> rabbit_types:ok_or_error(any())). --spec(controlling_process/2 :: (socket(), pid()) -> rabbit_types:ok_or_error(any())). +-spec(controlling_process/2 :: + (socket(), pid()) -> rabbit_types:ok_or_error(any())). -spec(port_command/2 :: (socket(), iolist()) -> 'true'). --spec(send/2 :: (socket(), binary() | iolist()) -> rabbit_types:ok_or_error(any())). --spec(peername/1 :: (socket()) -> - rabbit_types:ok({inet:ip_address(), rabbit_networking:ip_port()}) | error()). --spec(sockname/1 :: (socket()) -> - rabbit_types:ok({inet:ip_address(), rabbit_networking:ip_port()}) | error()). --spec(getstat/2 :: (socket(), [stat_option()]) -> - rabbit_types:ok([{stat_option(), integer()}]) | error()). +-spec(send/2 :: + (socket(), binary() | iolist()) -> rabbit_types:ok_or_error(any())). +-spec(peername/1 :: + (socket()) + -> rabbit_types:ok({inet:ip_address(), rabbit_networking:ip_port()}) | + error()). +-spec(sockname/1 :: + (socket()) + -> rabbit_types:ok({inet:ip_address(), rabbit_networking:ip_port()}) | + error()). +-spec(getstat/2 :: + (socket(), [stat_option()]) + -> rabbit_types:ok([{stat_option(), integer()}]) | error()). -endif. diff --git a/src/rabbit_networking.erl b/src/rabbit_networking.erl index 938da9b5..3a3357ba 100644 --- a/src/rabbit_networking.erl +++ b/src/rabbit_networking.erl @@ -74,14 +74,18 @@ -spec(node_listeners/1 :: (node()) -> [rabbit_types:listener()]). -spec(connections/0 :: () -> [rabbit_types:connection()]). -spec(connection_info_keys/0 :: () -> [rabbit_types:info_key()]). --spec(connection_info/1 :: (rabbit_types:connection()) -> [rabbit_types:info()]). --spec(connection_info/2 :: (rabbit_types:connection(), [rabbit_types:info_key()]) -> [rabbit_types:info()]). +-spec(connection_info/1 :: + (rabbit_types:connection()) -> [rabbit_types:info()]). +-spec(connection_info/2 :: + (rabbit_types:connection(), [rabbit_types:info_key()]) + -> [rabbit_types:info()]). -spec(connection_info_all/0 :: () -> [[rabbit_types:info()]]). --spec(connection_info_all/1 :: ([rabbit_types:info_key()]) -> [[rabbit_types:info()]]). +-spec(connection_info_all/1 :: + ([rabbit_types:info_key()]) -> [[rabbit_types:info()]]). -spec(close_connection/2 :: (pid(), string()) -> 'ok'). -spec(on_node_down/1 :: (node()) -> 'ok'). --spec(check_tcp_listener_address/3 :: (atom(), hostname(), ip_port()) -> - {inet:ip_address(), atom()}). +-spec(check_tcp_listener_address/3 :: + (atom(), hostname(), ip_port()) -> {inet:ip_address(), atom()}). -endif. diff --git a/src/rabbit_persister.erl b/src/rabbit_persister.erl index 327fc4b7..f1b255fa 100644 --- a/src/rabbit_persister.erl +++ b/src/rabbit_persister.erl @@ -73,15 +73,21 @@ {deliver, pmsg()} | {ack, pmsg()}). --spec(start_link/1 :: ([rabbit_amqqueue:name()]) -> - rabbit_types:ok(pid()) | 'ignore' | rabbit_types:error(any())). +-spec(start_link/1 :: + ([rabbit_amqqueue:name()]) + -> rabbit_types:ok(pid()) | 'ignore' | rabbit_types:error(any())). -spec(transaction/1 :: ([work_item()]) -> 'ok'). --spec(extend_transaction/2 :: ({rabbit_types:txn(), rabbit_amqqueue:name()}, [work_item()]) -> 'ok'). +-spec(extend_transaction/2 :: + ({rabbit_types:txn(), rabbit_amqqueue:name()}, [work_item()]) + -> 'ok'). -spec(dirty_work/1 :: ([work_item()]) -> 'ok'). --spec(commit_transaction/1 :: ({rabbit_types:txn(), rabbit_amqqueue:name()}) -> 'ok'). --spec(rollback_transaction/1 :: ({rabbit_types:txn(), rabbit_amqqueue:name()}) -> 'ok'). +-spec(commit_transaction/1 :: + ({rabbit_types:txn(), rabbit_amqqueue:name()}) -> 'ok'). +-spec(rollback_transaction/1 :: + ({rabbit_types:txn(), rabbit_amqqueue:name()}) -> 'ok'). -spec(force_snapshot/0 :: () -> 'ok'). --spec(queue_content/1 :: (rabbit_amqqueue:name()) -> [{rabbit_types:message(), boolean()}]). +-spec(queue_content/1 :: + (rabbit_amqqueue:name()) -> [{rabbit_types:message(), boolean()}]). -endif. diff --git a/src/rabbit_router.erl b/src/rabbit_router.erl index bc9b3891..d50b9f31 100644 --- a/src/rabbit_router.erl +++ b/src/rabbit_router.erl @@ -46,7 +46,8 @@ -type(routing_key() :: binary()). -type(routing_result() :: 'routed' | 'unroutable' | 'not_delivered'). --spec(deliver/2 :: ([pid()], rabbit_types:delivery()) -> {routing_result(), [pid()]}). +-spec(deliver/2 :: + ([pid()], rabbit_types:delivery()) -> {routing_result(), [pid()]}). -endif. diff --git a/src/rabbit_sasl_report_file_h.erl b/src/rabbit_sasl_report_file_h.erl index 434cdae0..eb2037c2 100644 --- a/src/rabbit_sasl_report_file_h.erl +++ b/src/rabbit_sasl_report_file_h.erl @@ -33,7 +33,8 @@ -behaviour(gen_event). --export([init/1, handle_event/2, handle_call/2, handle_info/2, terminate/2, code_change/3]). +-export([init/1, handle_event/2, handle_call/2, handle_info/2, terminate/2, + code_change/3]). %% rabbit_sasl_report_file_h is a wrapper around the sasl_report_file_h %% module because the original's init/1 does not match properly diff --git a/src/rabbit_types.erl b/src/rabbit_types.erl index 8baef98c..48eb8bb3 100644 --- a/src/rabbit_types.erl +++ b/src/rabbit_types.erl @@ -37,9 +37,10 @@ -export_type([txn/0, maybe/1, info/0, info_key/0, message/0, basic_message/0, delivery/0, content/0, decoded_content/0, undecoded_content/0, - unencoded_content/0, encoded_content/0, vhost/0, ctag/0, amqp_error/0, - r/1, r2/2, r3/3, ssl_socket/0, listener/0, binding/0, amqqueue/0, - exchange/0, connection/0, user/0, error/1, ok_or_error/1, ok/1]). + unencoded_content/0, encoded_content/0, vhost/0, ctag/0, + amqp_error/0, r/1, r2/2, r3/3, ssl_socket/0, listener/0, + binding/0, amqqueue/0, exchange/0, connection/0, user/0, + error/1, ok_or_error/1, ok/1]). -type(maybe(T) :: T | 'none'). -type(vhost() :: binary()). @@ -63,8 +64,8 @@ properties_bin :: maybe(binary()), payload_fragments_rev :: [binary()]}). -type(encoded_content() :: - #content{class_id :: rabbit_framing:amqp_class_id(), - properties :: maybe(rabbit_framing:amqp_property_record()), + #content{class_id :: rabbit_framing:amqp_class_id(), + properties :: maybe(rabbit_framing:amqp_property_record()), properties_bin :: binary(), payload_fragments_rev :: [binary()]}). -type(content() :: undecoded_content() | decoded_content()). @@ -93,20 +94,22 @@ explanation :: string(), method :: rabbit_framing:amqp_method_name()}). --type(r(Kind) :: r2(vhost(), Kind)). --type(r2(VirtualHost, Kind) :: r3(VirtualHost, Kind, rabbit_misc:resource_name())). +-type(r(Kind) :: + r2(vhost(), Kind)). +-type(r2(VirtualHost, Kind) :: + r3(VirtualHost, Kind, rabbit_misc:resource_name())). -type(r3(VirtualHost, Kind, Name) :: - #resource{virtual_host :: VirtualHost, - kind :: Kind, - name :: Name}). + #resource{virtual_host :: VirtualHost, + kind :: Kind, + name :: Name}). -type(ssl_socket() :: #ssl_socket{}). -type(listener() :: #listener{node :: node(), protocol :: atom(), - host :: rabbit_net:hostname(), - port :: rabbit_net:ip_port()}). + host :: rabbit_networking:hostname(), + port :: rabbit_networking:ip_port()}). -type(binding() :: #binding{exchange_name :: rabbit_exchange:name(), diff --git a/src/rabbit_writer.erl b/src/rabbit_writer.erl index 2b3082bc..c5f7f547 100644 --- a/src/rabbit_writer.erl +++ b/src/rabbit_writer.erl @@ -49,27 +49,36 @@ -ifdef(use_specs). -spec(start/3 :: - (rabbit_net:socket(), rabbit_channel:channel_number(), non_neg_integer()) + (rabbit_net:socket(), rabbit_channel:channel_number(), + non_neg_integer()) -> pid()). -spec(start_link/3 :: - (rabbit_net:socket(), rabbit_channel:channel_number(), non_neg_integer()) + (rabbit_net:socket(), rabbit_channel:channel_number(), + non_neg_integer()) -> pid()). --spec(send_command/2 :: (pid(), rabbit_framing:amqp_method_record()) -> 'ok'). +-spec(send_command/2 :: + (pid(), rabbit_framing:amqp_method_record()) -> 'ok'). -spec(send_command/3 :: - (pid(), rabbit_framing:amqp_method_record(), rabbit_types:content()) -> 'ok'). + (pid(), rabbit_framing:amqp_method_record(), rabbit_types:content()) + -> 'ok'). -spec(send_command_and_signal_back/3 :: (pid(), rabbit_framing:amqp_method(), pid()) -> 'ok'). -spec(send_command_and_signal_back/4 :: - (pid(), rabbit_framing:amqp_method(), rabbit_types:content(), pid()) -> 'ok'). + (pid(), rabbit_framing:amqp_method(), rabbit_types:content(), pid()) + -> 'ok'). -spec(send_command_and_notify/5 :: - (pid(), pid(), pid(), rabbit_framing:amqp_method_record(), rabbit_types:content()) + (pid(), pid(), pid(), rabbit_framing:amqp_method_record(), + rabbit_types:content()) -> 'ok'). -spec(internal_send_command/3 :: - (rabbit_net:socket(), rabbit_channel:channel_number(), rabbit_framing:amqp_method_record()) + (rabbit_net:socket(), rabbit_channel:channel_number(), + rabbit_framing:amqp_method_record()) -> 'ok'). -spec(internal_send_command/5 :: - (rabbit_net:socket(), rabbit_channel:channel_number(), rabbit_framing:amqp_method_record(), - rabbit_types:content(), non_neg_integer()) -> 'ok'). + (rabbit_net:socket(), rabbit_channel:channel_number(), + rabbit_framing:amqp_method_record(), rabbit_types:content(), + non_neg_integer()) + -> 'ok'). -endif. diff --git a/src/supervisor2.erl b/src/supervisor2.erl index 0b1d7265..03dc0f99 100644 --- a/src/supervisor2.erl +++ b/src/supervisor2.erl @@ -11,20 +11,20 @@ %% All modifications are (C) 2010 LShift Ltd. %% %% %CopyrightBegin% -%% +%% %% Copyright Ericsson AB 1996-2009. All Rights Reserved. -%% +%% %% The contents of this file are subject to the Erlang Public License, %% Version 1.1, (the "License"); you may not use this file except in %% compliance with the License. You should have received a copy of the %% Erlang Public License along with this software. If not, it can be %% retrieved online at http://www.erlang.org/. -%% +%% %% 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. -%% +%% %% %CopyrightEnd% %% -module(supervisor2). diff --git a/src/vm_memory_monitor.erl b/src/vm_memory_monitor.erl index 069c5a0f..bbc3a8c0 100644 --- a/src/vm_memory_monitor.erl +++ b/src/vm_memory_monitor.erl @@ -72,8 +72,10 @@ -ifdef(use_specs). --spec(start_link/1 :: (float()) -> - ('ignore' | rabbit_types:error(any()) | rabbit_types:ok(pid()))). +-spec(start_link/1 :: + (float()) -> 'ignore' | + rabbit_types:error(any()) | + rabbit_types:ok(pid())). -spec(update/0 :: () -> 'ok'). -spec(get_total_memory/0 :: () -> (non_neg_integer() | 'unknown')). -spec(get_vm_limit/0 :: () -> (non_neg_integer() | 'unknown')). diff --git a/src/worker_pool.erl b/src/worker_pool.erl index a1e94fa8..3105d5f9 100644 --- a/src/worker_pool.erl +++ b/src/worker_pool.erl @@ -52,7 +52,8 @@ -ifdef(use_specs). --spec(start_link/0 :: () -> rabbit_types:ok(pid()) | 'ignore' | rabbit_types:error(any())). +-spec(start_link/0 :: + () -> rabbit_types:ok(pid()) | 'ignore' | rabbit_types:error(any())). -spec(submit/1 :: (fun (() -> A) | {atom(), atom(), [any()]}) -> A). -spec(submit_async/1 :: (fun (() -> any()) | {atom(), atom(), [any()]}) -> 'ok'). diff --git a/src/worker_pool_sup.erl b/src/worker_pool_sup.erl index 3d9d5b16..220b4bad 100644 --- a/src/worker_pool_sup.erl +++ b/src/worker_pool_sup.erl @@ -41,9 +41,11 @@ -ifdef(use_specs). --spec(start_link/0 :: () -> rabbit_types:ok(pid()) | 'ignore' | rabbit_types:error(any())). +-spec(start_link/0 :: + () -> rabbit_types:ok(pid()) | 'ignore' | rabbit_types:error(any())). -spec(start_link/1 :: - (non_neg_integer()) -> rabbit_types:ok(pid()) | 'ignore' | rabbit_types:error(any())). + (non_neg_integer()) + -> rabbit_types:ok(pid()) | 'ignore' | rabbit_types:error(any())). -endif. diff --git a/src/worker_pool_worker.erl b/src/worker_pool_worker.erl index 6a14484e..a61e4cc3 100644 --- a/src/worker_pool_worker.erl +++ b/src/worker_pool_worker.erl @@ -44,7 +44,8 @@ -ifdef(use_specs). --spec(start_link/1 :: (any()) -> {'ok', pid()} | 'ignore' | rabbit_types:error(any())). +-spec(start_link/1 :: + (any()) -> {'ok', pid()} | 'ignore' | rabbit_types:error(any())). -spec(submit/2 :: (pid(), fun (() -> A) | {atom(), atom(), [any()]}) -> A). -spec(submit_async/2 :: (pid(), fun (() -> any()) | {atom(), atom(), [any()]}) -> 'ok'). -- cgit v1.2.1 From 1c488fc909ae460cf9852dc793ef1367d1bdd948 Mon Sep 17 00:00:00 2001 From: Alexandru Scvortov Date: Tue, 6 Jul 2010 13:28:46 +0100 Subject: include cleanup --- src/rabbit_dialyzer.erl | 1 - src/rabbit_guid.erl | 2 -- 2 files changed, 3 deletions(-) diff --git a/src/rabbit_dialyzer.erl b/src/rabbit_dialyzer.erl index 51a376f6..0ec6beb6 100644 --- a/src/rabbit_dialyzer.erl +++ b/src/rabbit_dialyzer.erl @@ -30,7 +30,6 @@ %% -module(rabbit_dialyzer). --include("rabbit.hrl"). -export([create_basic_plt/1, add_to_plt/2, dialyze_files/2, halt_with_code/1]). diff --git a/src/rabbit_guid.erl b/src/rabbit_guid.erl index 0cbd47d8..bce76615 100644 --- a/src/rabbit_guid.erl +++ b/src/rabbit_guid.erl @@ -31,8 +31,6 @@ -module(rabbit_guid). --include("rabbit.hrl"). - -behaviour(gen_server). -export([start_link/0]). -- cgit v1.2.1 From 5f122da1e9de4bc315021127011aca19d15a1b33 Mon Sep 17 00:00:00 2001 From: Matthew Sackman Date: Wed, 7 Jul 2010 11:43:27 +0100 Subject: r2 -> r3. --- src/rabbit_misc.erl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rabbit_misc.erl b/src/rabbit_misc.erl index a46c7628..1761dadc 100644 --- a/src/rabbit_misc.erl +++ b/src/rabbit_misc.erl @@ -104,7 +104,7 @@ ({atom(), any()}) -> rabbit_types:ok(any()) | rabbit_types:error('not_found')). -spec(r/2 :: (rabbit_types:vhost(), K) - -> rabbit_types:r2(rabbit_types:vhost(), K, '_') + -> rabbit_types:r3(rabbit_types:vhost(), K, '_') when is_subtype(K, atom())). -spec(r/3 :: (rabbit_types:vhost() | rabbit_types:r(atom()), K, resource_name()) -- cgit v1.2.1 From e75093380c58fbdb46953507c50d211dc34aacfb Mon Sep 17 00:00:00 2001 From: Matthew Sackman Date: Wed, 7 Jul 2010 12:12:42 +0100 Subject: Introduced and used ok_or_error2(A,B). Also verified everything seems happy under R13B03 --- src/delegate_sup.erl | 3 +-- src/file_handle_cache.erl | 2 +- src/pg_local.erl | 5 ++--- src/rabbit_exchange_type_registry.erl | 5 ++--- src/rabbit_guid.erl | 3 +-- src/rabbit_log.erl | 3 +-- src/rabbit_memory_monitor.erl | 3 +-- src/rabbit_misc.erl | 5 ++--- src/rabbit_persister.erl | 2 +- src/rabbit_types.erl | 1 + src/worker_pool.erl | 3 +-- src/worker_pool_sup.erl | 8 +++----- 12 files changed, 17 insertions(+), 26 deletions(-) diff --git a/src/delegate_sup.erl b/src/delegate_sup.erl index b5274d5d..39ef3f85 100644 --- a/src/delegate_sup.erl +++ b/src/delegate_sup.erl @@ -43,8 +43,7 @@ -ifdef(use_specs). --spec(start_link/0 :: - () -> rabbit_types:ok(pid()) | 'ignore' | rabbit_types:error(any())). +-spec(start_link/0 :: () -> rabbit_types:ok_or_error2(pid(), any()) | 'ignore'). -endif. diff --git a/src/file_handle_cache.erl b/src/file_handle_cache.erl index 1f54af57..e209ee6b 100644 --- a/src/file_handle_cache.erl +++ b/src/file_handle_cache.erl @@ -183,7 +183,7 @@ -type(ref() :: any()). -type(ok_or_error() :: rabbit_types:ok_or_error(any())). --type(val_or_error(T) :: (rabbit_types:ok(T) | rabbit_types:error(any()))). +-type(val_or_error(T) :: rabbit_types:ok_or_error2(T, any())). -type(position() :: ('bof' | 'eof' | non_neg_integer() | {('bof' |'eof'), non_neg_integer()} | {'cur', integer()})). diff --git a/src/pg_local.erl b/src/pg_local.erl index c9b677cc..f5ded123 100644 --- a/src/pg_local.erl +++ b/src/pg_local.erl @@ -45,9 +45,8 @@ -type(name() :: term()). --spec(start_link/0 :: - () -> rabbit_types:ok(pid()) | rabbit_types:error(term())). --spec(start/0 :: () -> rabbit_types:ok(pid()) | rabbit_types:error(term())). +-spec(start_link/0 :: () -> rabbit_types:ok_or_error2(pid(), term())). +-spec(start/0 :: () -> rabbit_types:ok_or_error2(pid(), term())). -spec(join/2 :: (name(), pid()) -> 'ok'). -spec(leave/2 :: (name(), pid()) -> 'ok'). -spec(get_members/1 :: (name()) -> [pid()]). diff --git a/src/rabbit_exchange_type_registry.erl b/src/rabbit_exchange_type_registry.erl index f6666211..7906fbee 100644 --- a/src/rabbit_exchange_type_registry.erl +++ b/src/rabbit_exchange_type_registry.erl @@ -46,13 +46,12 @@ -ifdef(use_specs). -spec(start_link/0 :: - () -> 'ignore' | rabbit_types:error(term()) | rabbit_types:ok(pid())). + () -> 'ignore' | rabbit_types:ok_or_error2(pid(), term())). -spec(register/2 :: (binary(), atom()) -> 'ok'). -spec(binary_to_type/1 :: (binary()) -> atom() | rabbit_types:error('not_found')). -spec(lookup_module/1 :: - (atom()) -> rabbit_types:ok(atom()) | - rabbit_types:error('not_found')). + (atom()) -> rabbit_types:ok_or_error2(atom(), 'not_found')). -endif. diff --git a/src/rabbit_guid.erl b/src/rabbit_guid.erl index bce76615..af1c629f 100644 --- a/src/rabbit_guid.erl +++ b/src/rabbit_guid.erl @@ -52,8 +52,7 @@ -type(guid() :: binary()). --spec(start_link/0 :: - () -> rabbit_types:ok(pid()) | 'ignore' | rabbit_types:error(any())). +-spec(start_link/0 :: () -> 'ignore' | rabbit_types:ok_or_error2(pid(), any())). -spec(guid/0 :: () -> guid()). -spec(string_guid/1 :: (any()) -> string()). -spec(binstring_guid/1 :: (any()) -> binary()). diff --git a/src/rabbit_log.erl b/src/rabbit_log.erl index 157c879f..85bcbca0 100644 --- a/src/rabbit_log.erl +++ b/src/rabbit_log.erl @@ -50,8 +50,7 @@ -ifdef(use_specs). --spec(start_link/0 :: - () -> rabbit_types:ok(pid()) | 'ignore' | rabbit_types:error(any())). +-spec(start_link/0 :: () -> 'ignore' | rabbit_types:ok_or_error2(pid(), any())). -spec(debug/1 :: (string()) -> 'ok'). -spec(debug/2 :: (string(), [any()]) -> 'ok'). -spec(info/1 :: (string()) -> 'ok'). diff --git a/src/rabbit_memory_monitor.erl b/src/rabbit_memory_monitor.erl index c482ebec..bdf38075 100644 --- a/src/rabbit_memory_monitor.erl +++ b/src/rabbit_memory_monitor.erl @@ -86,8 +86,7 @@ -ifdef(use_specs). --spec(start_link/0 :: - () -> 'ignore' | rabbit_types:error(any()) | rabbit_types:ok(pid())). +-spec(start_link/0 :: () -> 'ignore' | rabbit_types:ok_or_error2(pid(), any())). -spec(update/0 :: () -> 'ok'). -spec(register/2 :: (pid(), {atom(),atom(),[any()]}) -> 'ok'). -spec(deregister/1 :: (pid()) -> 'ok'). diff --git a/src/rabbit_misc.erl b/src/rabbit_misc.erl index 1761dadc..dd85d1e4 100644 --- a/src/rabbit_misc.erl +++ b/src/rabbit_misc.erl @@ -97,12 +97,11 @@ -> no_return()). -spec(not_found/1 :: (rabbit_types:r(atom())) -> no_return()). -spec(get_config/1 :: - (atom()) -> rabbit_types:ok(any()) | rabbit_types:error('not_found')). + (atom()) -> rabbit_types:ok_or_error2(any(), 'not_found')). -spec(get_config/2 :: (atom(), A) -> A). -spec(set_config/2 :: (atom(), any()) -> 'ok'). -spec(dirty_read/1 :: - ({atom(), any()}) - -> rabbit_types:ok(any()) | rabbit_types:error('not_found')). + ({atom(), any()}) -> rabbit_types:ok_or_error2(any(), 'not_found')). -spec(r/2 :: (rabbit_types:vhost(), K) -> rabbit_types:r3(rabbit_types:vhost(), K, '_') when is_subtype(K, atom())). diff --git a/src/rabbit_persister.erl b/src/rabbit_persister.erl index f1b255fa..a427b135 100644 --- a/src/rabbit_persister.erl +++ b/src/rabbit_persister.erl @@ -75,7 +75,7 @@ -spec(start_link/1 :: ([rabbit_amqqueue:name()]) - -> rabbit_types:ok(pid()) | 'ignore' | rabbit_types:error(any())). + -> 'ignore' | rabbit_types:ok_or_error2(pid(), any())). -spec(transaction/1 :: ([work_item()]) -> 'ok'). -spec(extend_transaction/2 :: ({rabbit_types:txn(), rabbit_amqqueue:name()}, [work_item()]) diff --git a/src/rabbit_types.erl b/src/rabbit_types.erl index 48eb8bb3..0b88365e 100644 --- a/src/rabbit_types.erl +++ b/src/rabbit_types.erl @@ -140,5 +140,6 @@ -type(ok(A) :: {'ok', A}). -type(error(A) :: {'error', A}). -type(ok_or_error(A) :: 'ok' | error(A)). +-type(ok_or_error2(A, B) :: ok(A) | error(B)). -endif. % use_specs diff --git a/src/worker_pool.erl b/src/worker_pool.erl index 3105d5f9..01ce3535 100644 --- a/src/worker_pool.erl +++ b/src/worker_pool.erl @@ -52,8 +52,7 @@ -ifdef(use_specs). --spec(start_link/0 :: - () -> rabbit_types:ok(pid()) | 'ignore' | rabbit_types:error(any())). +-spec(start_link/0 :: () -> 'ignore' | rabbit_types:ok_or_error2(pid(), any())). -spec(submit/1 :: (fun (() -> A) | {atom(), atom(), [any()]}) -> A). -spec(submit_async/1 :: (fun (() -> any()) | {atom(), atom(), [any()]}) -> 'ok'). diff --git a/src/worker_pool_sup.erl b/src/worker_pool_sup.erl index 220b4bad..afa21164 100644 --- a/src/worker_pool_sup.erl +++ b/src/worker_pool_sup.erl @@ -41,11 +41,9 @@ -ifdef(use_specs). --spec(start_link/0 :: - () -> rabbit_types:ok(pid()) | 'ignore' | rabbit_types:error(any())). --spec(start_link/1 :: - (non_neg_integer()) - -> rabbit_types:ok(pid()) | 'ignore' | rabbit_types:error(any())). +-spec(start_link/0 :: () -> 'ignore' | rabbit_types:ok_or_error2(pid(), any())). +-spec(start_link/1 :: (non_neg_integer()) -> + 'ignore' | rabbit_types:ok_or_error2(pid(), any())). -endif. -- cgit v1.2.1 From 65d50e5198f37e8f8581b696863b6ef2f42575e7 Mon Sep 17 00:00:00 2001 From: Matthew Sackman Date: Wed, 7 Jul 2010 12:19:52 +0100 Subject: Bump use_specs to R13B04 or later --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 6edd7abc..a66d0640 100644 --- a/Makefile +++ b/Makefile @@ -41,10 +41,10 @@ RABBIT_PLT=rabbit.plt ifndef USE_SPECS # our type specs rely on features and bug fixes in dialyzer that are -# only available in R13B01 upwards (R13B01 is eshell 5.7.2) +# only available in R13B04 upwards (R13B04 is erts 5.7.5) # # NB: the test assumes that version number will only contain single digits -USE_SPECS=$(shell if [ $$(erl -noshell -eval 'io:format(erlang:system_info(version)), halt().') \> "5.7.1" ]; then echo "true"; else echo "false"; fi) +USE_SPECS=$(shell if [ $$(erl -noshell -eval 'io:format(erlang:system_info(version)), halt().') \> "5.7.4" ]; then echo "true"; else echo "false"; fi) endif #other args: +native +"{hipe,[o3,verbose]}" -Ddebug=true +debug_info +no_strict_record_tests -- cgit v1.2.1 From ec0ba06aee07a8dd5edc8d5a9796df7a9a612775 Mon Sep 17 00:00:00 2001 From: Matthew Sackman Date: Wed, 7 Jul 2010 12:27:37 +0100 Subject: Whoops, forgot to export it --- src/rabbit_types.erl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rabbit_types.erl b/src/rabbit_types.erl index 0b88365e..2e492b80 100644 --- a/src/rabbit_types.erl +++ b/src/rabbit_types.erl @@ -40,7 +40,7 @@ unencoded_content/0, encoded_content/0, vhost/0, ctag/0, amqp_error/0, r/1, r2/2, r3/3, ssl_socket/0, listener/0, binding/0, amqqueue/0, exchange/0, connection/0, user/0, - error/1, ok_or_error/1, ok/1]). + error/1, ok_or_error/1, ok_or_error2/2, ok/1]). -type(maybe(T) :: T | 'none'). -type(vhost() :: binary()). -- cgit v1.2.1