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 | ff07cdabd6fec11d82be05ea294068a53c7b40d7 (patch) | |
tree | 75f3fca3a09a30b34120efa13dd1854b0d632194 | |
parent | 46da2f463944758c4befbe3577fdea6348954db9 (diff) | |
download | rabbitmq-server-ff07cdabd6fec11d82be05ea294068a53c7b40d7.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 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) -> |