import kms = require('@aws-cdk/aws-kms');
import s3n = require('@aws-cdk/aws-s3-notifications');
import cdk = require('@aws-cdk/cdk');
import { QueueArn } from './sqs.generated';
/**
 * Reference to a new or existing Amazon SQS queue
 */
export declare abstract class QueueRef extends cdk.Construct implements s3n.IBucketNotificationDestination {
    /**
     * Import an existing queue
     */
    static import(parent: cdk.Construct, name: string, props: QueueRefProps): void;
    /**
     * The ARN of this queue
     */
    abstract readonly queueArn: QueueArn;
    /**
     * The URL of this queue
     */
    abstract readonly queueUrl: QueueUrl;
    /**
     * If this queue is server-side encrypted, this is the KMS encryption key.
     */
    abstract readonly encryptionMasterKey?: kms.EncryptionKeyRef;
    /**
     * Controls automatic creation of policy objects.
     *
     * Set by subclasses.
     */
    protected abstract readonly autoCreatePolicy: boolean;
    private policy?;
    /**
     * The set of S3 bucket IDs that are allowed to send notifications to this queue.
     */
    private readonly notifyingBuckets;
    /**
     * Export a queue
     */
    export(): QueueRefProps;
    /**
     * Adds a statement to the IAM resource policy associated with this queue.
     *
     * If this queue was created in this stack (`new Queue`), a queue policy
     * will be automatically created upon the first call to `addToPolicy`. If
     * the queue is improted (`Queue.import`), then this is a no-op.
     */
    addToResourcePolicy(statement: cdk.PolicyStatement): void;
    /**
     * Allows using SQS queues as destinations for bucket notifications.
     * Use `bucket.onEvent(event, queue)` to subscribe.
     * @param bucketArn The ARN of the notifying bucket.
     * @param bucketId A unique ID for the notifying bucket.
     */
    asBucketNotificationDestination(bucketArn: cdk.Arn, bucketId: string): s3n.BucketNotificationDestinationProps;
}
/**
 * Reference to a queue
 */
export interface QueueRefProps {
    /**
     * The ARN of the queue.
     */
    queueArn: QueueArn;
    /**
     * The URL of the queue.
     */
    queueUrl: QueueUrl;
    /**
     * KMS encryption key, if this queue is server-side encrypted by a KMS key.
     */
    keyArn?: kms.KeyArn;
}
/**
 * URL of a queue
 */
export declare class QueueUrl extends cdk.Token {
}
