diff options
| author | Emile Joubert <emile@rabbitmq.com> | 2011-11-22 10:10:11 +0000 |
|---|---|---|
| committer | Emile Joubert <emile@rabbitmq.com> | 2011-11-22 10:10:11 +0000 |
| commit | 5a339e41d924aedf6c90077cdcb08f8fd0f2c3ed (patch) | |
| tree | 75f3fca3a09a30b34120efa13dd1854b0d632194 | |
| parent | 73a31048797f70aafae8ab7ff7c1aea5efbb8a4f (diff) | |
| download | rabbitmq-server-git-5a339e41d924aedf6c90077cdcb08f8fd0f2c3ed.tar.gz | |
Allow equivalence comparisons with absent values
| -rw-r--r-- | src/rabbit_misc.erl | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/src/rabbit_misc.erl b/src/rabbit_misc.erl index 88192e8f5b..e145c20036 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) -> |
