summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Radestock <matthias@lshift.net>2010-01-27 18:29:45 +0000
committerMatthias Radestock <matthias@lshift.net>2010-01-27 18:29:45 +0000
commit77ea2babf2113458f8f1f01b7dd6afaed657f262 (patch)
treec0608c007d6a582bd017113d83d4b57c72c43a71
parent2ce4994c9c71be3eae142fed69be1093347a20d9 (diff)
downloadrabbitmq-server-77ea2babf2113458f8f1f01b7dd6afaed657f262.tar.gz
flesh out binary_generator API
...for symmetry with binary_parser and because we need it in bug 21673
-rw-r--r--include/rabbit.hrl6
-rw-r--r--src/rabbit_binary_generator.erl19
2 files changed, 25 insertions, 0 deletions
diff --git a/include/rabbit.hrl b/include/rabbit.hrl
index 4b157cbc..38d8c899 100644
--- a/include/rabbit.hrl
+++ b/include/rabbit.hrl
@@ -128,11 +128,17 @@
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(),
diff --git a/src/rabbit_binary_generator.erl b/src/rabbit_binary_generator.erl
index 9bffe87e..b8e161a6 100644
--- a/src/rabbit_binary_generator.erl
+++ b/src/rabbit_binary_generator.erl
@@ -46,6 +46,7 @@
build_heartbeat_frame/0]).
-export([generate_table/1, encode_properties/2]).
-export([check_empty_content_body_frame_size/0]).
+-export([ensure_content_encoded/1, clear_encoded_content/1]).
-import(lists).
@@ -63,6 +64,8 @@
-spec(generate_table/1 :: (amqp_table()) -> binary()).
-spec(encode_properties/2 :: ([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()).
-endif.
@@ -262,3 +265,19 @@ check_empty_content_body_frame_size() ->
exit({incorrect_empty_content_body_frame_size,
ComputedSize, ?EMPTY_CONTENT_BODY_FRAME_SIZE})
end.
+
+ensure_content_encoded(Content = #content{properties_bin = PropsBin})
+ when PropsBin =/= 'none' ->
+ Content;
+ensure_content_encoded(Content = #content{properties = Props}) ->
+ Content #content{properties_bin = rabbit_framing:encode_properties(Props)}.
+
+clear_encoded_content(Content = #content{properties_bin = none}) ->
+ Content;
+clear_encoded_content(Content = #content{properties = none}) ->
+ %% Only clear when we can rebuild the properties_bin later in
+ %% accordance to the content record definition comment - maximum
+ %% one of properties and properties_bin can be 'none'
+ Content;
+clear_encoded_content(Content = #content{}) ->
+ Content#content{properties_bin = none}.