Documentation ¶
Index ¶
- func CloseRes(ctx context.Context, res *http.Response)
- func FormatManagementError(body []byte, origErr error) error
- func NewResponseError(resp *http.Response) error
- func NotFound(err error) (bool, *http.Response)
- func StringToTime(timeStr string) (time.Time, error)
- func WrapWithQueueEnvelope(qd *QueueDescription, tokenProvider auth.TokenProvider) (*QueueEnvelope, []MiddlewareFunc)
- type ActionDescriber
- type ActionDescription
- type Author
- type BaseEntityDescription
- type Content
- type CorrelationFilter
- type CountDetails
- type DefaultRuleDescription
- type Entity
- type EntityManager
- type EntityStatus
- type Entry
- type FalseFilter
- type Feed
- type FilterDescriber
- type FilterDescription
- type Link
- type ManagementError
- type MiddlewareFunc
- type NamespaceEntry
- type NamespaceInfo
- type QueueDescription
- type QueueEntity
- type QueueEnvelope
- type QueueFeed
- type ResponseError
- type RestHandler
- type RuleDescription
- type RuleEntity
- type RuleEnvelope
- type SQLAction
- type SQLFilter
- type SubscriptionDescription
- type SubscriptionEntity
- type SubscriptionEnvelope
- type SubscriptionFeed
- type TopicDescription
- type TopicEntity
- type TopicEnvelope
- type TopicFeed
- type TrueFilter
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func FormatManagementError ¶ added in v0.2.0
func NewResponseError ¶ added in v0.3.2
func WrapWithQueueEnvelope ¶ added in v0.3.0
func WrapWithQueueEnvelope(qd *QueueDescription, tokenProvider auth.TokenProvider) (*QueueEnvelope, []MiddlewareFunc)
Types ¶
type ActionDescriber ¶ added in v0.2.0
type ActionDescriber interface {
ToActionDescription() ActionDescription
}
ActionDescriber can transform itself into a ActionDescription
type ActionDescription ¶ added in v0.2.0
type ActionDescription struct { Type string `xml:"http://www.w3.org/2001/XMLSchema-instance type,attr"` SQLExpression string `xml:"SqlExpression"` RequiresPreprocessing bool `xml:"RequiresPreprocessing"` CompatibilityLevel int `xml:"CompatibilityLevel,omitempty"` }
ActionDescription describes an action upon a message that matches a filter
With SQL filter conditions, you can define an action that can annotate the message by adding, removing, or replacing properties and their values. The action uses a SQL-like expression that loosely leans on the SQL UPDATE statement syntax. The action is performed on the message after it has been matched and before the message is selected into the subscription. The changes to the message properties are private to the message copied into the subscription.
type BaseEntityDescription ¶ added in v0.2.0
type BaseEntityDescription struct { InstanceMetadataSchema *string `xml:"xmlns:i,attr,omitempty"` ServiceBusSchema *string `xml:"xmlns,attr,omitempty"` }
BaseEntityDescription provides common fields which are part of Queues, Topics and Subscriptions
type Content ¶
type Content struct { XMLName xml.Name `xml:"content"` Type string `xml:"type,attr"` Body string `xml:",innerxml"` }
Content is a generic body for an Atom entry
type CorrelationFilter ¶ added in v0.2.0
type CorrelationFilter struct { CorrelationID *string `xml:"CorrelationId,omitempty"` MessageID *string `xml:"MessageId,omitempty"` To *string `xml:"To,omitempty"` ReplyTo *string `xml:"ReplyTo,omitempty"` Label *string `xml:"Label,omitempty"` SessionID *string `xml:"SessionId,omitempty"` ReplyToSessionID *string `xml:"ReplyToSessionId,omitempty"` ContentType *string `xml:"ContentType,omitempty"` Properties map[string]interface{} `xml:"Properties,omitempty"` }
CorrelationFilter holds a set of conditions that are matched against one or more of an arriving message's user and system properties. A common use is to match against the CorrelationId property, but the application can also choose to match against ContentType, Label, MessageId, ReplyTo, ReplyToSessionId, SessionId, To, and any user-defined properties. A match exists when an arriving message's value for a property is equal to the value specified in the correlation filter. For string expressions, the comparison is case-sensitive. When specifying multiple match properties, the filter combines them as a logical AND condition, meaning for the filter to match, all conditions must match.
func (CorrelationFilter) ToFilterDescription ¶ added in v0.2.0
func (cf CorrelationFilter) ToFilterDescription() FilterDescription
ToFilterDescription will transform the CorrelationFilter into a FilterDescription
type CountDetails ¶ added in v0.2.0
type CountDetails struct { XMLName xml.Name `xml:"CountDetails"` ActiveMessageCount *int32 `xml:"ActiveMessageCount,omitempty"` DeadLetterMessageCount *int32 `xml:"DeadLetterMessageCount,omitempty"` ScheduledMessageCount *int32 `xml:"ScheduledMessageCount,omitempty"` TransferDeadLetterMessageCount *int32 `xml:"TransferDeadLetterMessageCount,omitempty"` TransferMessageCount *int32 `xml:"TransferMessageCount,omitempty"` }
CountDetails has current active (and other) messages for queue/topic.
type DefaultRuleDescription ¶ added in v0.2.0
type DefaultRuleDescription struct { XMLName xml.Name `xml:"DefaultRuleDescription"` Filter FilterDescription `xml:"Filter"` Name *string `xml:"Name,omitempty"` }
DefaultRuleDescription is the content type for Subscription Rule management requests
type Entity ¶ added in v0.2.0
Entity is represents the most basic form of an Azure Service Bus entity.
type EntityManager ¶ added in v0.2.0
type EntityManager interface { Get(ctx context.Context, entityPath string, respObj interface{}, mw ...MiddlewareFunc) (*http.Response, error) Put(ctx context.Context, entityPath string, body interface{}, respObj interface{}, mw ...MiddlewareFunc) (*http.Response, error) Delete(ctx context.Context, entityPath string, mw ...MiddlewareFunc) (*http.Response, error) TokenProvider() auth.TokenProvider }
func NewEntityManager ¶ added in v0.2.0
func NewEntityManager(ns string, tokenCredential azcore.TokenCredential, version string, retryOptions utils.RetryOptions) (EntityManager, error)
NewEntityManager creates an entity manager using a TokenCredential.
func NewEntityManagerWithConnectionString ¶ added in v0.2.0
func NewEntityManagerWithConnectionString(connectionString string, version string) (EntityManager, error)
NewEntityManagerWithConnectionString creates an entity manager (a lower level HTTP client for the ATOM endpoint). This is typically wrapped by an entity specific client (like TopicManager, QueueManager or , SubscriptionManager).
type EntityStatus ¶ added in v0.2.0
type EntityStatus string
EntityStatus enumerates the values for entity status.
const ( // Active ... Active EntityStatus = "Active" // Creating ... Creating EntityStatus = "Creating" // Deleting ... Deleting EntityStatus = "Deleting" // Disabled ... Disabled EntityStatus = "Disabled" // ReceiveDisabled ... ReceiveDisabled EntityStatus = "ReceiveDisabled" // Renaming ... Renaming EntityStatus = "Renaming" // Restoring ... Restoring EntityStatus = "Restoring" // SendDisabled ... SendDisabled EntityStatus = "SendDisabled" // Unknown ... Unknown EntityStatus = "Unknown" )
type Entry ¶
type Entry struct { XMLName xml.Name `xml:"entry"` ID string `xml:"id,omitempty"` Title string `xml:"title,omitempty"` Author *Author `xml:"author,omitempty"` Link *Link `xml:"link,omitempty"` Content *Content `xml:"content"` DataServiceSchema string `xml:"xmlns:d,attr,omitempty"` DataServiceMetadataSchema string `xml:"xmlns:m,attr,omitempty"` AtomSchema string `xml:"xmlns,attr"` }
Entry is the Atom wrapper for a management request
type FalseFilter ¶ added in v0.2.0
type FalseFilter struct{}
FalseFilter represents a always false sql expression which will deny all messages
func (FalseFilter) ToFilterDescription ¶ added in v0.2.0
func (ff FalseFilter) ToFilterDescription() FilterDescription
ToFilterDescription will transform the FalseFilter into a FilterDescription
type Feed ¶
type Feed struct { XMLName xml.Name `xml:"feed"` ID string `xml:"id"` Title string `xml:"title"` Entries []Entry `xml:"entry"` }
Feed is an Atom feed which contains entries
type FilterDescriber ¶ added in v0.2.0
type FilterDescriber interface {
ToFilterDescription() FilterDescription
}
FilterDescriber can transform itself into a FilterDescription
type FilterDescription ¶ added in v0.2.0
type FilterDescription struct { XMLName xml.Name `xml:"Filter"` CorrelationFilter Type string `xml:"http://www.w3.org/2001/XMLSchema-instance type,attr"` SQLExpression *string `xml:"SqlExpression,omitempty"` CompatibilityLevel int `xml:"CompatibilityLevel,omitempty"` }
FilterDescription describes a filter which can be applied to a subscription to filter messages from the topic.
Subscribers can define which messages they want to receive from a topic. These messages are specified in the form of one or more named subscription rules. Each rule consists of a condition that selects particular messages and an action that annotates the selected message. For each matching rule condition, the subscription produces a copy of the message, which may be differently annotated for each matching rule.
Each newly created topic subscription has an initial default subscription rule. If you don't explicitly specify a filter condition for the rule, the applied filter is the true filter that enables all messages to be selected into the subscription. The default rule has no associated annotation action.
type Link ¶
type Link struct { XMLName xml.Name `xml:"link"` Rel string `xml:"rel,attr"` HREF string `xml:"href,attr"` }
Link is an Atom link used in an entry
type ManagementError ¶ added in v0.3.4
type ManagementError struct { XMLName xml.Name `xml:"Error"` Code int `xml:"Code"` Detail string `xml:"Detail"` }
example: <Error><Code>401</Code><Detail>Manage,EntityRead claims required for this operation.</Detail></Error>
func (*ManagementError) String ¶ added in v0.3.4
func (m *ManagementError) String() string
type MiddlewareFunc ¶ added in v0.2.0
type MiddlewareFunc func(next RestHandler) RestHandler
MiddlewareFunc allows a consumer of the entity manager to inject handlers within the request / response pipeline
The example below adds the atom xml content type to the request, calls the next middleware and returns the result.
addAtomXMLContentType MiddlewareFunc = func(next RestHandler) RestHandler { return func(ctx context.Context, req *http.Request) (res *http.Response, e error) { if req.Method != http.MethodGet && req.Method != http.MethodHead { req.Header.Add("content-Type", "application/atom+xml;type=entry;charset=utf-8") } return next(ctx, req) } }
func TraceReqAndResponseMiddleware ¶ added in v0.2.0
func TraceReqAndResponseMiddleware() MiddlewareFunc
TraceReqAndResponseMiddleware will print the dump of the management request and response.
This should only be used for debugging or educational purposes.
type NamespaceEntry ¶ added in v0.3.0
type NamespaceEntry struct {
NamespaceInfo *NamespaceInfo `xml:"content>NamespaceInfo"`
}
type NamespaceInfo ¶ added in v0.3.0
type QueueDescription ¶ added in v0.2.0
type QueueDescription struct { XMLName xml.Name `xml:"QueueDescription"` BaseEntityDescription LockDuration *string `xml:"LockDuration,omitempty"` // LockDuration - ISO 8601 timespan duration of a peek-lock; that is, the amount of time that the message is locked for other receivers. The maximum value for LockDuration is 5 minutes; the default value is 1 minute. MaxSizeInMegabytes *int32 `xml:"MaxSizeInMegabytes,omitempty"` // MaxSizeInMegabytes - The maximum size of the queue in megabytes, which is the size of memory allocated for the queue. Default is 1024. RequiresDuplicateDetection *bool `xml:"RequiresDuplicateDetection,omitempty"` // RequiresDuplicateDetection - A value indicating if this queue requires duplicate detection. RequiresSession *bool `xml:"RequiresSession,omitempty"` DefaultMessageTimeToLive *string `xml:"DefaultMessageTimeToLive,omitempty"` // DefaultMessageTimeToLive - ISO 8601 default message timespan to live value. This is the duration after which the message expires, starting from when the message is sent to Service Bus. This is the default value used when TimeToLive is not set on a message itself. DeadLetteringOnMessageExpiration *bool `xml:"DeadLetteringOnMessageExpiration,omitempty"` // DeadLetteringOnMessageExpiration - A value that indicates whether this queue has dead letter support when a message expires. DuplicateDetectionHistoryTimeWindow *string `xml:"DuplicateDetectionHistoryTimeWindow,omitempty"` // DuplicateDetectionHistoryTimeWindow - ISO 8601 timeSpan structure that defines the duration of the duplicate detection history. The default value is 10 minutes. MaxDeliveryCount *int32 `xml:"MaxDeliveryCount,omitempty"` // MaxDeliveryCount - The maximum delivery count. A message is automatically deadlettered after this number of deliveries. default value is 10. EnableBatchedOperations *bool `xml:"EnableBatchedOperations,omitempty"` // EnableBatchedOperations - Value that indicates whether server-side batched operations are enabled. SizeInBytes *int64 `xml:"SizeInBytes,omitempty"` // SizeInBytes - The size of the queue, in bytes. MessageCount *int64 `xml:"MessageCount,omitempty"` // MessageCount - The number of messages in the queue. IsAnonymousAccessible *bool `xml:"IsAnonymousAccessible,omitempty"` Status *EntityStatus `xml:"Status,omitempty"` AccessedAt string `xml:"AccessedAt,omitempty"` CreatedAt string `xml:"CreatedAt,omitempty"` UpdatedAt string `xml:"UpdatedAt,omitempty"` SupportOrdering *bool `xml:"SupportOrdering,omitempty"` AutoDeleteOnIdle *string `xml:"AutoDeleteOnIdle,omitempty"` EnablePartitioning *bool `xml:"EnablePartitioning,omitempty"` EnableExpress *bool `xml:"EnableExpress,omitempty"` CountDetails *CountDetails `xml:"CountDetails,omitempty"` ForwardTo *string `xml:"ForwardTo,omitempty"` ForwardDeadLetteredMessagesTo *string `xml:"ForwardDeadLetteredMessagesTo,omitempty"` // ForwardDeadLetteredMessagesTo - absolute URI of the entity to forward dead letter messages UserMetadata *string `xml:"UserMetadata,omitempty"` }
QueueDescription is the content type for Queue management requests
type QueueEntity ¶ added in v0.2.0
type QueueEntity struct { *QueueDescription *Entity }
QueueEntity is the Azure Service Bus description of a Queue for management activities
type QueueEnvelope ¶ added in v0.2.0
type QueueEnvelope struct { *Entry Content *queueContent `xml:"content"` }
QueueEnvelope is a specialized Queue feed entry
type QueueFeed ¶ added in v0.2.0
type QueueFeed struct { *Feed Entries []QueueEnvelope `xml:"entry"` }
QueueFeed is a specialized feed containing QueueEntries
type ResponseError ¶ added in v0.2.0
type ResponseError struct {
// contains filtered or unexported fields
}
ResponseError conforms to the older azcore.HTTPResponse NOTE: after breaking changes have been incorporated we'll move to the newer azcore.HTTPResponseError
func (ResponseError) Error ¶ added in v0.2.0
func (e ResponseError) Error() string
func (ResponseError) RawResponse ¶ added in v0.2.0
func (e ResponseError) RawResponse() *http.Response
func (ResponseError) Unwrap ¶ added in v0.2.0
func (e ResponseError) Unwrap() error
type RestHandler ¶ added in v0.2.0
RestHandler is used to transform a request and response within the http pipeline
type RuleDescription ¶ added in v0.2.0
type RuleDescription struct { XMLName xml.Name `xml:"RuleDescription"` BaseEntityDescription CreatedAt string `xml:"CreatedAt,omitempty"` Filter FilterDescription `xml:"Filter"` Action *ActionDescription `xml:"Action,omitempty"` }
RuleDescription is the content type for Subscription Rule management requests
type RuleEntity ¶ added in v0.2.0
type RuleEntity struct { *RuleDescription *Entity }
RuleEntity is the Azure Service Bus description of a Subscription Rule for management activities
type RuleEnvelope ¶ added in v0.3.0
type RuleEnvelope struct { *Entry Content *ruleContent `xml:"content"` }
Subscriptions (and rules)
type SQLAction ¶ added in v0.2.0
type SQLAction struct {
Expression string
}
SQLAction represents a SQL language-based action expression that is evaluated against a BrokeredMessage. A SQLAction supports a subset of the SQL-92 standard.
With SQL filter conditions, you can define an action that can annotate the message by adding, removing, or replacing properties and their values. The action uses a SQL-like expression that loosely leans on the SQL UPDATE statement syntax. The action is performed on the message after it has been matched and before the message is selected into the subscription. The changes to the message properties are private to the message copied into the subscription.
see: https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-messaging-sql-filter
func (SQLAction) ToActionDescription ¶ added in v0.2.0
func (sf SQLAction) ToActionDescription() ActionDescription
ToActionDescription will transform the SqlAction into a ActionDescription
type SQLFilter ¶ added in v0.2.0
type SQLFilter struct {
Expression string
}
SQLFilter represents a SQL language-based filter expression that is evaluated against a BrokeredMessage. A SQLFilter supports a subset of the SQL-92 standard.
see: https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-messaging-sql-filter
func (SQLFilter) ToFilterDescription ¶ added in v0.2.0
func (sf SQLFilter) ToFilterDescription() FilterDescription
ToFilterDescription will transform the SqlFilter into a FilterDescription
type SubscriptionDescription ¶ added in v0.2.0
type SubscriptionDescription struct { XMLName xml.Name `xml:"SubscriptionDescription"` BaseEntityDescription LockDuration *string `xml:"LockDuration,omitempty"` // LockDuration - ISO 8601 timespan duration of a peek-lock; that is, the amount of time that the message is locked for other receivers. The maximum value for LockDuration is 5 minutes; the default value is 1 minute. RequiresSession *bool `xml:"RequiresSession,omitempty"` DefaultMessageTimeToLive *string `xml:"DefaultMessageTimeToLive,omitempty"` // DefaultMessageTimeToLive - ISO 8601 default message timespan to live value. This is the duration after which the message expires, starting from when the message is sent to Service Bus. This is the default value used when TimeToLive is not set on a message itself. DeadLetteringOnMessageExpiration *bool `xml:"DeadLetteringOnMessageExpiration,omitempty"` // DeadLetteringOnMessageExpiration - A value that indicates whether this queue has dead letter support when a message expires. DeadLetteringOnFilterEvaluationExceptions *bool `xml:"DeadLetteringOnFilterEvaluationExceptions,omitempty"` DefaultRuleDescription *DefaultRuleDescription `xml:"DefaultRuleDescription,omitempty"` MaxDeliveryCount *int32 `xml:"MaxDeliveryCount,omitempty"` // MaxDeliveryCount - The maximum delivery count. A message is automatically deadlettered after this number of deliveries. default value is 10. MessageCount *int64 `xml:"MessageCount,omitempty"` // MessageCount - The number of messages in the queue. EnableBatchedOperations *bool `xml:"EnableBatchedOperations,omitempty"` // EnableBatchedOperations - Value that indicates whether server-side batched operations are enabled. Status *EntityStatus `xml:"Status,omitempty"` ForwardTo *string `xml:"ForwardTo,omitempty"` // ForwardTo - absolute URI of the entity to forward messages UserMetadata *string `xml:"UserMetadata,omitempty"` ForwardDeadLetteredMessagesTo *string `xml:"ForwardDeadLetteredMessagesTo,omitempty"` // ForwardDeadLetteredMessagesTo - absolute URI of the entity to forward dead letter messages AutoDeleteOnIdle *string `xml:"AutoDeleteOnIdle,omitempty"` CreatedAt string `xml:"CreatedAt,omitempty"` UpdatedAt string `xml:"UpdatedAt,omitempty"` AccessedAt string `xml:"AccessedAt,omitempty"` CountDetails *CountDetails `xml:"CountDetails,omitempty"` }
SubscriptionDescription is the content type for Subscription management requests
type SubscriptionEntity ¶ added in v0.2.0
type SubscriptionEntity struct { *SubscriptionDescription *Entity }
SubscriptionEntity is the Azure Service Bus description of a topic Subscription for management activities
type SubscriptionEnvelope ¶ added in v0.3.0
type SubscriptionEnvelope struct { *Entry Content *subscriptionContent `xml:"content"` }
subscriptionEntryContent is a specialized Topic feed Subscription
func WrapWithSubscriptionEnvelope ¶ added in v0.3.0
func WrapWithSubscriptionEnvelope(sd *SubscriptionDescription) *SubscriptionEnvelope
type SubscriptionFeed ¶ added in v0.3.0
type SubscriptionFeed struct { *Feed Entries []SubscriptionEnvelope `xml:"entry"` }
SubscriptionFeed is a specialized feed containing Topic Subscriptions
type TopicDescription ¶ added in v0.2.0
type TopicDescription struct { XMLName xml.Name `xml:"TopicDescription"` BaseEntityDescription DefaultMessageTimeToLive *string `xml:"DefaultMessageTimeToLive,omitempty"` // DefaultMessageTimeToLive - ISO 8601 default message time span to live value. This is the duration after which the message expires, starting from when the message is sent to Service Bus. This is the default value used when TimeToLive is not set on a message itself. MaxSizeInMegabytes *int32 `xml:"MaxSizeInMegabytes,omitempty"` // MaxSizeInMegabytes - The maximum size of the queue in megabytes, which is the size of memory allocated for the queue. Default is 1024. RequiresDuplicateDetection *bool `xml:"RequiresDuplicateDetection,omitempty"` // RequiresDuplicateDetection - A value indicating if this queue requires duplicate detection. DuplicateDetectionHistoryTimeWindow *string `xml:"DuplicateDetectionHistoryTimeWindow,omitempty"` // DuplicateDetectionHistoryTimeWindow - ISO 8601 timeSpan structure that defines the duration of the duplicate detection history. The default value is 10 minutes. EnableBatchedOperations *bool `xml:"EnableBatchedOperations,omitempty"` // EnableBatchedOperations - Value that indicates whether server-side batched operations are enabled. SizeInBytes *int64 `xml:"SizeInBytes,omitempty"` // SizeInBytes - The size of the queue, in bytes. FilteringMessagesBeforePublishing *bool `xml:"FilteringMessagesBeforePublishing,omitempty"` IsAnonymousAccessible *bool `xml:"IsAnonymousAccessible,omitempty"` Status *EntityStatus `xml:"Status,omitempty"` UserMetadata *string `xml:"UserMetadata,omitempty"` AccessedAt string `xml:"AccessedAt,omitempty"` CreatedAt string `xml:"CreatedAt,omitempty"` UpdatedAt string `xml:"UpdatedAt,omitempty"` SupportOrdering *bool `xml:"SupportOrdering,omitempty"` AutoDeleteOnIdle *string `xml:"AutoDeleteOnIdle,omitempty"` EnablePartitioning *bool `xml:"EnablePartitioning,omitempty"` EnableSubscriptionPartitioning *bool `xml:"EnableSubscriptionPartitioning,omitempty"` EnableExpress *bool `xml:"EnableExpress,omitempty"` CountDetails *CountDetails `xml:"CountDetails,omitempty"` SubscriptionCount *int32 `xml:"SubscriptionCount,omitempty"` }
TopicDescription is the content type for Topic management requests Refer here for ordering constraints: https://github.com/Azure/azure-sdk-for-net/blob/ed2e86cb299e11a276dcf652a9db796efe2d2a27/sdk/servicebus/Azure.Messaging.ServiceBus/src/Administration/TopicPropertiesExtensions.cs#L178
type TopicEntity ¶ added in v0.2.0
type TopicEntity struct { *TopicDescription *Entity }
TopicEntity is the Azure Service Bus description of a Topic for management activities
type TopicEnvelope ¶ added in v0.3.0
type TopicEnvelope struct { *Entry Content *topicContent `xml:"content"` }
TopicEnvelope is a specialized Topic feed entry
func WrapWithTopicEnvelope ¶ added in v0.3.0
func WrapWithTopicEnvelope(td *TopicDescription) *TopicEnvelope
type TopicFeed ¶ added in v0.3.0
type TopicFeed struct { *Feed Entries []TopicEnvelope `xml:"entry"` }
TopicFeed is a specialized feed containing Topic Entries
type TrueFilter ¶ added in v0.2.0
type TrueFilter struct{}
TrueFilter represents a always true sql expression which will accept all messages
func (TrueFilter) ToFilterDescription ¶ added in v0.2.0
func (tf TrueFilter) ToFilterDescription() FilterDescription
ToFilterDescription will transform the TrueFilter into a FilterDescription