summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmile Joubert <emile@rabbitmq.com>2011-11-22 10:10:11 +0000
committerEmile Joubert <emile@rabbitmq.com>2011-11-22 10:10:11 +0000
commitff07cdabd6fec11d82be05ea294068a53c7b40d7 (patch)
tree75f3fca3a09a30b34120efa13dd1854b0d632194
parent46da2f463944758c4befbe3577fdea6348954db9 (diff)
downloadrabbitmq-server-ff07cdabd6fec11d82be05ea294068a53c7b40d7.tar.gz
Allow equivalence comparisons with absent values
-rw-r--r--src/rabbit_misc.erl30
1 files changed, 18 insertions, 12 deletions
diff --git a/src/rabbit_misc.erl b/src/rabbit_misc.erl
index 88192e8f..e145c200 100644
--- a/src/rabbit_misc.erl
+++ b/src/rabbit_misc.erl
@@ -250,18 +250,24 @@ assert_args_equivalence(Orig, New, Name, Keys) ->
ok.
assert_args_equivalence1(Orig, New, Name, Key) ->
- case {table_lookup(Orig, Key), table_lookup(New, Key)} of
- {Same, Same} ->
- ok;
- {{OrigType, OrigVal} = Orig1, {NewType, NewVal} = New1} ->
- case type_class(OrigType) == type_class(NewType) andalso
- OrigVal == NewVal of
- true -> ok;
- false -> protocol_error(precondition_failed, "inequivalent arg"
- " '~s' for ~s: received ~s but current"
- " is ~s",
- [Key, rs(Name), val(New1), val(Orig1)])
- end
+ Comparison =
+ case {table_lookup(Orig, Key), table_lookup(New, Key)} of
+ {Same, Same} ->
+ ok;
+ {{OrigType, OrigVal} = Orig1, {NewType, NewVal} = New1} ->
+ case type_class(OrigType) == type_class(NewType) andalso
+ OrigVal == NewVal of
+ true -> ok;
+ false -> {Orig1, New1}
+ end;
+ {_, _} = X -> X
+ end,
+ case Comparison of
+ ok -> ok;
+ {Orig2, New2} -> protocol_error(precondition_failed, "inequivalent arg"
+ " '~s' for ~s: received ~s but current"
+ " is ~s",
+ [Key, rs(Name), val(New2), val(Orig2)])
end.
val(undefined) ->