All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonMain.aws.sdk.kotlin.services.sns.model.PublishBatchRequestEntry.kt Maven / Gradle / Ivy

// Code generated by smithy-kotlin-codegen. DO NOT EDIT!

package aws.sdk.kotlin.services.sns.model



/**
 * Contains the details of a single Amazon SNS message along with an `Id` that identifies a message within the batch.
 */
public class PublishBatchRequestEntry private constructor(builder: Builder) {
    /**
     * An identifier for the message in this batch.
     *
     * The `Ids` of a batch request must be unique within a request.
     *
     * This identifier can have up to 80 characters. The following characters are accepted: alphanumeric characters, hyphens(-), and underscores (_).
     */
    public val id: kotlin.String = requireNotNull(builder.id) { "A non-null value must be provided for id" }
    /**
     * The body of the message.
     */
    public val message: kotlin.String = requireNotNull(builder.message) { "A non-null value must be provided for message" }
    /**
     * Each message attribute consists of a `Name`, `Type`, and `Value`. For more information, see [Amazon SNS message attributes](https://docs.aws.amazon.com/sns/latest/dg/sns-message-attributes.html) in the Amazon SNS Developer Guide.
     */
    public val messageAttributes: Map? = builder.messageAttributes
    /**
     * This parameter applies only to FIFO (first-in-first-out) topics.
     *
     * The token used for deduplication of messages within a 5-minute minimum deduplication interval. If a message with a particular `MessageDeduplicationId` is sent successfully, subsequent messages with the same `MessageDeduplicationId` are accepted successfully but aren't delivered.
     * + Every message must have a unique `MessageDeduplicationId`.
     *    + You may provide a `MessageDeduplicationId` explicitly.
     *    + If you aren't able to provide a `MessageDeduplicationId` and you enable `ContentBasedDeduplication` for your topic, Amazon SNS uses a SHA-256 hash to generate the `MessageDeduplicationId` using the body of the message (but not the attributes of the message).
     *    + If you don't provide a `MessageDeduplicationId` and the topic doesn't have `ContentBasedDeduplication` set, the action fails with an error.
     *    + If the topic has a `ContentBasedDeduplication` set, your `MessageDeduplicationId` overrides the generated one.
     * + When `ContentBasedDeduplication` is in effect, messages with identical content sent within the deduplication interval are treated as duplicates and only one copy of the message is delivered.
     * + If you send one message with `ContentBasedDeduplication` enabled, and then another message with a `MessageDeduplicationId` that is the same as the one generated for the first `MessageDeduplicationId`, the two messages are treated as duplicates and only one copy of the message is delivered.
     *
     * The `MessageDeduplicationId` is available to the consumer of the message (this can be useful for troubleshooting delivery issues).
     *
     * If a message is sent successfully but the acknowledgement is lost and the message is resent with the same `MessageDeduplicationId` after the deduplication interval, Amazon SNS can't detect duplicate messages.
     *
     * Amazon SNS continues to keep track of the message deduplication ID even after the message is received and deleted.
     *
     * The length of `MessageDeduplicationId` is 128 characters.
     *
     * `MessageDeduplicationId` can contain alphanumeric characters `(a-z, A-Z, 0-9)` and punctuation `(!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~)`.
     */
    public val messageDeduplicationId: kotlin.String? = builder.messageDeduplicationId
    /**
     * This parameter applies only to FIFO (first-in-first-out) topics.
     *
     * The tag that specifies that a message belongs to a specific message group. Messages that belong to the same message group are processed in a FIFO manner (however, messages in different message groups might be processed out of order). To interleave multiple ordered streams within a single topic, use `MessageGroupId` values (for example, session data for multiple users). In this scenario, multiple consumers can process the topic, but the session data of each user is processed in a FIFO fashion.
     *
     * You must associate a non-empty `MessageGroupId` with a message. If you don't provide a `MessageGroupId`, the action fails.
     *
     * The length of `MessageGroupId` is 128 characters.
     *
     * `MessageGroupId` can contain alphanumeric characters `(a-z, A-Z, 0-9)` and punctuation `(!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~)`.
     *
     * `MessageGroupId` is required for FIFO topics. You can't use it for standard topics.
     */
    public val messageGroupId: kotlin.String? = builder.messageGroupId
    /**
     * Set `MessageStructure` to `json` if you want to send a different message for each protocol. For example, using one publish action, you can send a short message to your SMS subscribers and a longer message to your email subscribers. If you set `MessageStructure` to `json`, the value of the `Message` parameter must:
     * + be a syntactically valid JSON object; and
     * + contain at least a top-level JSON key of "default" with a value that is a string.
     *
     * You can define other top-level keys that define the message you want to send to a specific transport protocol (e.g. http).
     */
    public val messageStructure: kotlin.String? = builder.messageStructure
    /**
     * The subject of the batch message.
     */
    public val subject: kotlin.String? = builder.subject

    public companion object {
        public operator fun invoke(block: Builder.() -> kotlin.Unit): aws.sdk.kotlin.services.sns.model.PublishBatchRequestEntry = Builder().apply(block).build()
    }

    override fun toString(): kotlin.String = buildString {
        append("PublishBatchRequestEntry(")
        append("id=$id,")
        append("message=$message,")
        append("messageAttributes=$messageAttributes,")
        append("messageDeduplicationId=$messageDeduplicationId,")
        append("messageGroupId=$messageGroupId,")
        append("messageStructure=$messageStructure,")
        append("subject=$subject")
        append(")")
    }

    override fun hashCode(): kotlin.Int {
        var result = id.hashCode()
        result = 31 * result + (message.hashCode())
        result = 31 * result + (messageAttributes?.hashCode() ?: 0)
        result = 31 * result + (messageDeduplicationId?.hashCode() ?: 0)
        result = 31 * result + (messageGroupId?.hashCode() ?: 0)
        result = 31 * result + (messageStructure?.hashCode() ?: 0)
        result = 31 * result + (subject?.hashCode() ?: 0)
        return result
    }

    override fun equals(other: kotlin.Any?): kotlin.Boolean {
        if (this === other) return true
        if (other == null || this::class != other::class) return false

        other as PublishBatchRequestEntry

        if (id != other.id) return false
        if (message != other.message) return false
        if (messageAttributes != other.messageAttributes) return false
        if (messageDeduplicationId != other.messageDeduplicationId) return false
        if (messageGroupId != other.messageGroupId) return false
        if (messageStructure != other.messageStructure) return false
        if (subject != other.subject) return false

        return true
    }

    public inline fun copy(block: Builder.() -> kotlin.Unit = {}): aws.sdk.kotlin.services.sns.model.PublishBatchRequestEntry = Builder(this).apply(block).build()

    public class Builder {
        /**
         * An identifier for the message in this batch.
         *
         * The `Ids` of a batch request must be unique within a request.
         *
         * This identifier can have up to 80 characters. The following characters are accepted: alphanumeric characters, hyphens(-), and underscores (_).
         */
        public var id: kotlin.String? = null
        /**
         * The body of the message.
         */
        public var message: kotlin.String? = null
        /**
         * Each message attribute consists of a `Name`, `Type`, and `Value`. For more information, see [Amazon SNS message attributes](https://docs.aws.amazon.com/sns/latest/dg/sns-message-attributes.html) in the Amazon SNS Developer Guide.
         */
        public var messageAttributes: Map? = null
        /**
         * This parameter applies only to FIFO (first-in-first-out) topics.
         *
         * The token used for deduplication of messages within a 5-minute minimum deduplication interval. If a message with a particular `MessageDeduplicationId` is sent successfully, subsequent messages with the same `MessageDeduplicationId` are accepted successfully but aren't delivered.
         * + Every message must have a unique `MessageDeduplicationId`.
         *    + You may provide a `MessageDeduplicationId` explicitly.
         *    + If you aren't able to provide a `MessageDeduplicationId` and you enable `ContentBasedDeduplication` for your topic, Amazon SNS uses a SHA-256 hash to generate the `MessageDeduplicationId` using the body of the message (but not the attributes of the message).
         *    + If you don't provide a `MessageDeduplicationId` and the topic doesn't have `ContentBasedDeduplication` set, the action fails with an error.
         *    + If the topic has a `ContentBasedDeduplication` set, your `MessageDeduplicationId` overrides the generated one.
         * + When `ContentBasedDeduplication` is in effect, messages with identical content sent within the deduplication interval are treated as duplicates and only one copy of the message is delivered.
         * + If you send one message with `ContentBasedDeduplication` enabled, and then another message with a `MessageDeduplicationId` that is the same as the one generated for the first `MessageDeduplicationId`, the two messages are treated as duplicates and only one copy of the message is delivered.
         *
         * The `MessageDeduplicationId` is available to the consumer of the message (this can be useful for troubleshooting delivery issues).
         *
         * If a message is sent successfully but the acknowledgement is lost and the message is resent with the same `MessageDeduplicationId` after the deduplication interval, Amazon SNS can't detect duplicate messages.
         *
         * Amazon SNS continues to keep track of the message deduplication ID even after the message is received and deleted.
         *
         * The length of `MessageDeduplicationId` is 128 characters.
         *
         * `MessageDeduplicationId` can contain alphanumeric characters `(a-z, A-Z, 0-9)` and punctuation `(!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~)`.
         */
        public var messageDeduplicationId: kotlin.String? = null
        /**
         * This parameter applies only to FIFO (first-in-first-out) topics.
         *
         * The tag that specifies that a message belongs to a specific message group. Messages that belong to the same message group are processed in a FIFO manner (however, messages in different message groups might be processed out of order). To interleave multiple ordered streams within a single topic, use `MessageGroupId` values (for example, session data for multiple users). In this scenario, multiple consumers can process the topic, but the session data of each user is processed in a FIFO fashion.
         *
         * You must associate a non-empty `MessageGroupId` with a message. If you don't provide a `MessageGroupId`, the action fails.
         *
         * The length of `MessageGroupId` is 128 characters.
         *
         * `MessageGroupId` can contain alphanumeric characters `(a-z, A-Z, 0-9)` and punctuation `(!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~)`.
         *
         * `MessageGroupId` is required for FIFO topics. You can't use it for standard topics.
         */
        public var messageGroupId: kotlin.String? = null
        /**
         * Set `MessageStructure` to `json` if you want to send a different message for each protocol. For example, using one publish action, you can send a short message to your SMS subscribers and a longer message to your email subscribers. If you set `MessageStructure` to `json`, the value of the `Message` parameter must:
         * + be a syntactically valid JSON object; and
         * + contain at least a top-level JSON key of "default" with a value that is a string.
         *
         * You can define other top-level keys that define the message you want to send to a specific transport protocol (e.g. http).
         */
        public var messageStructure: kotlin.String? = null
        /**
         * The subject of the batch message.
         */
        public var subject: kotlin.String? = null

        @PublishedApi
        internal constructor()
        @PublishedApi
        internal constructor(x: aws.sdk.kotlin.services.sns.model.PublishBatchRequestEntry) : this() {
            this.id = x.id
            this.message = x.message
            this.messageAttributes = x.messageAttributes
            this.messageDeduplicationId = x.messageDeduplicationId
            this.messageGroupId = x.messageGroupId
            this.messageStructure = x.messageStructure
            this.subject = x.subject
        }

        @PublishedApi
        internal fun build(): aws.sdk.kotlin.services.sns.model.PublishBatchRequestEntry = PublishBatchRequestEntry(this)

        internal fun correctErrors(): Builder {
            if (id == null) id = ""
            if (message == null) message = ""
            return this
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy