Current section

Files

Jump to
amqp10_client src amqp10_raw_msg.erl
Raw

src/amqp10_raw_msg.erl

%% This Source Code Form is subject to the terms of the Mozilla Public
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
%% Copyright (c) 2007-2025 Broadcom. All Rights Reserved. The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. All rights reserved.
%%
-module(amqp10_raw_msg).
-include_lib("amqp10_common/include/amqp10_framing.hrl").
-include_lib("amqp10_common/include/amqp10_types.hrl").
%% Just for AMQP10 shovel usage. It avoids the binary <-> amqp10 <-> mc
%% conversion, with all the unnecessary encoding/decoding steps.
%% It allows for just binary <-> mc conversion, as the payload is stored as is
-export([new/3,
settled/1,
delivery_tag/1,
payload/1,
handle/1,
set_handle/2,
transfer/1,
is/1]).
-record(amqp10_raw_msg,
{settled :: boolean(),
delivery_tag :: non_neg_integer(),
payload :: binary(),
handle :: non_neg_integer() | undefined
}).
-opaque amqp10_raw_msg() :: #amqp10_raw_msg{}.
-export_type([amqp10_raw_msg/0]).
-spec new(boolean(), non_neg_integer(), binary()) ->
amqp10_raw_msg().
new(Settled, DeliveryTag, Payload) ->
#amqp10_raw_msg{settled = Settled,
delivery_tag = DeliveryTag,
payload = Payload}.
-spec settled(amqp10_raw_msg()) -> boolean().
settled(#amqp10_raw_msg{settled = Settled}) ->
Settled.
-spec delivery_tag(amqp10_raw_msg()) -> non_neg_integer().
delivery_tag(#amqp10_raw_msg{delivery_tag = DeliveryTag}) ->
DeliveryTag.
-spec payload(amqp10_raw_msg()) -> binary().
payload(#amqp10_raw_msg{payload = Payload}) ->
Payload.
-spec handle(amqp10_raw_msg()) -> non_neg_integer().
handle(#amqp10_raw_msg{handle = Handle}) ->
Handle.
-spec set_handle(non_neg_integer(), amqp10_raw_msg()) ->
amqp10_raw_msg().
set_handle(Handle, #amqp10_raw_msg{} = Msg) ->
Msg#amqp10_raw_msg{handle = Handle}.
-spec transfer(amqp10_raw_msg()) -> #'v1_0.transfer'{}.
transfer(#amqp10_raw_msg{settled = Settled,
delivery_tag = DeliveryTag,
handle = Handle}) ->
#'v1_0.transfer'{
delivery_tag = {binary, rabbit_data_coercion:to_binary(DeliveryTag)},
settled = Settled,
handle = {uint, Handle},
message_format = {uint, ?MESSAGE_FORMAT}}.
-spec is(term()) -> boolean().
is(Record) ->
is_record(Record, amqp10_raw_msg).