link_options.go (63 lines of code) (raw):
package amqp
import (
"github.com/Azure/go-amqp/internal/encoding"
)
type SenderOptions struct {
// Capabilities is the list of extension capabilities the sender supports.
Capabilities []string
// Durability indicates what state of the sender will be retained durably.
//
// Default: DurabilityNone.
Durability Durability
// DynamicAddress indicates a dynamic address is to be used.
// Any specified address will be ignored.
//
// Default: false.
DynamicAddress bool
// DesiredCapabilities maps to the desired-capabilities of an ATTACH frame.
DesiredCapabilities []string
// ExpiryPolicy determines when the expiry timer of the sender starts counting
// down from the timeout value. If the link is subsequently re-attached before
// the timeout is reached, the count down is aborted.
//
// Default: ExpirySessionEnd.
ExpiryPolicy ExpiryPolicy
// ExpiryTimeout is the duration in seconds that the sender will be retained.
//
// Default: 0.
ExpiryTimeout uint32
// Name sets the name of the link.
//
// Link names must be unique per-connection and direction.
//
// Default: randomly generated.
Name string
// Properties sets an entry in the link properties map sent to the server.
Properties map[string]any
// RequestedReceiverSettleMode sets the requested receiver settlement mode.
//
// If a settlement mode is explicitly set and the server does not
// honor it an error will be returned during link attachment.
//
// Default: Accept the settlement mode set by the server, commonly ModeFirst.
RequestedReceiverSettleMode *ReceiverSettleMode
// SettlementMode sets the settlement mode in use by this sender.
//
// Default: ModeMixed.
SettlementMode *SenderSettleMode
// SourceAddress specifies the source address for this sender.
SourceAddress string
// TargetCapabilities is the list of extension capabilities the sender desires.
TargetCapabilities []string
// TargetDurability indicates what state of the peer will be retained durably.
//
// Default: DurabilityNone.
TargetDurability Durability
// TargetExpiryPolicy determines when the expiry timer of the peer starts counting
// down from the timeout value. If the link is subsequently re-attached before
// the timeout is reached, the count down is aborted.
//
// Default: ExpirySessionEnd.
TargetExpiryPolicy ExpiryPolicy
// TargetExpiryTimeout is the duration in seconds that the peer will be retained.
//
// Default: 0.
TargetExpiryTimeout uint32
}
type ReceiverOptions struct {
// Capabilities is the list of extension capabilities the receiver supports.
Capabilities []string
// Credit specifies the maximum number of unacknowledged messages
// the sender can transmit. Once this limit is reached, no more messages
// will arrive until messages are acknowledged and settled.
//
// As messages are settled, any available credit will automatically be issued.
//
// Setting this to -1 requires manual management of link credit.
// Credits can be added with IssueCredit(), and links can also be
// drained with DrainCredit().
// This should only be enabled when complete control of the link's
// flow control is required.
//
// Default: 1.
Credit int32
// DesiredCapabilities maps to the desired-capabilities of an ATTACH frame.
DesiredCapabilities []string
// Durability indicates what state of the receiver will be retained durably.
//
// Default: DurabilityNone.
Durability Durability
// DynamicAddress indicates a dynamic address is to be used.
// Any specified address will be ignored.
//
// Default: false.
DynamicAddress bool
// ExpiryPolicy determines when the expiry timer of the sender starts counting
// down from the timeout value. If the link is subsequently re-attached before
// the timeout is reached, the count down is aborted.
//
// Default: ExpirySessionEnd.
ExpiryPolicy ExpiryPolicy
// ExpiryTimeout is the duration in seconds that the sender will be retained.
//
// Default: 0.
ExpiryTimeout uint32
// Filters contains the desired filters for this receiver.
// If the peer cannot fulfill the filters the link will be detached.
Filters []LinkFilter
// MaxMessageSize sets the maximum message size that can
// be received on the link.
//
// A size of zero indicates no limit.
//
// Default: 0.
MaxMessageSize uint64
// Name sets the name of the link.
//
// Link names must be unique per-connection and direction.
//
// Default: randomly generated.
Name string
// Properties sets an entry in the link properties map sent to the server.
Properties map[string]any
// RequestedSenderSettleMode sets the requested sender settlement mode.
//
// If a settlement mode is explicitly set and the server does not
// honor it an error will be returned during link attachment.
//
// Default: Accept the settlement mode set by the server, commonly ModeMixed.
RequestedSenderSettleMode *SenderSettleMode
// SettlementMode sets the settlement mode in use by this receiver.
//
// Default: ModeFirst.
SettlementMode *ReceiverSettleMode
// TargetAddress specifies the target address for this receiver.
TargetAddress string
// SourceCapabilities is the list of extension capabilities the receiver desires.
SourceCapabilities []string
// SourceDurability indicates what state of the peer will be retained durably.
//
// Default: DurabilityNone.
SourceDurability Durability
// SourceExpiryPolicy determines when the expiry timer of the peer starts counting
// down from the timeout value. If the link is subsequently re-attached before
// the timeout is reached, the count down is aborted.
//
// Default: ExpirySessionEnd.
SourceExpiryPolicy ExpiryPolicy
// SourceExpiryTimeout is the duration in seconds that the peer will be retained.
//
// Default: 0.
SourceExpiryTimeout uint32
}
// LinkFilter is an advanced API for setting non-standard source filters.
// Please file an issue or open a PR if a standard filter is missing from this
// library.
//
// The name is the key for the filter map. It will be encoded as an AMQP symbol type.
//
// The code is the descriptor of the described type value. The domain-id and descriptor-id
// should be concatenated together. If 0 is passed as the code, the name will be used as
// the descriptor.
//
// The value is the value of the descriped types. Acceptable types for value are specific
// to the filter.
//
// Example:
//
// The standard selector-filter is defined as:
//
// <descriptor name="apache.org:selector-filter:string" code="0x0000468C:0x00000004"/>
//
// In this case the name is "apache.org:selector-filter:string" and the code is
// 0x0000468C00000004.
//
// LinkSourceFilter("apache.org:selector-filter:string", 0x0000468C00000004, exampleValue)
//
// References:
//
// http://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-messaging-v1.0-os.html#type-filter-set
// http://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-types-v1.0-os.html#section-descriptor-values
type LinkFilter func(encoding.Filter)
// NewLinkFilter creates a new LinkFilter with the specified values.
// Any preexisting link filter with the same name will be updated with the new code and value.
func NewLinkFilter(name string, code uint64, value any) LinkFilter {
return func(f encoding.Filter) {
var descriptor any
if code != 0 {
descriptor = code
} else {
descriptor = encoding.Symbol(name)
}
f[encoding.Symbol(name)] = &encoding.DescribedType{
Descriptor: descriptor,
Value: value,
}
}
}
// NewSelectorFilter creates a new selector filter (apache.org:selector-filter:string) with the specified filter value.
// Any preexisting selector filter will be updated with the new filter value.
func NewSelectorFilter(filter string) LinkFilter {
return NewLinkFilter(selectorFilter, selectorFilterCode, filter)
}
const (
selectorFilter = "apache.org:selector-filter:string"
selectorFilterCode = uint64(0x0000468C00000004)
)