import { Resource } from "../../core";
import { Construct } from 'constructs';
import { IEventBus } from './event-bus';
import { EventPattern } from './event-pattern';
import { IRule } from './rule-ref';
import { Schedule } from './schedule';
import { IRuleTarget } from './target';
/**
 * (experimental) Properties for defining an EventBridge Rule.
 *
 * @experimental
 */
export interface RuleProps {
    /**
     * (experimental) A description of the rule's purpose.
     *
     * @default - No description.
     * @experimental
     */
    readonly description?: string;
    /**
     * (experimental) A name for the rule.
     *
     * @default - AWS CloudFormation generates a unique physical ID and uses that ID
     * for the rule name. For more information, see Name Type.
     * @experimental
     */
    readonly ruleName?: string;
    /**
     * (experimental) Indicates whether the rule is enabled.
     *
     * @default true
     * @experimental
     */
    readonly enabled?: boolean;
    /**
     * (experimental) The schedule or rate (frequency) that determines when EventBridge runs the rule.
     *
     * For more information, see Schedule Expression Syntax for
     * Rules in the Amazon EventBridge User Guide.
     *
     * @default - None.
     * @see https://docs.aws.amazon.com/eventbridge/latest/userguide/scheduled-events.html
     *
     * You must specify this property, the `eventPattern` property, or both.
     * @experimental
     */
    readonly schedule?: Schedule;
    /**
     * (experimental) Describes which events EventBridge routes to the specified target.
     *
     * These routed events are matched events. For more information, see Events
     * and Event Patterns in the Amazon EventBridge User Guide.
     *
     * @default - None.
     * @see https://docs.aws.amazon.com/eventbridge/latest/userguide/eventbridge-and-event-patterns.html
     *
     * You must specify this property (either via props or via
     * `addEventPattern`), the `scheduleExpression` property, or both. The
     * method `addEventPattern` can be used to add filter values to the event
     * pattern.
     * @experimental
     */
    readonly eventPattern?: EventPattern;
    /**
     * (experimental) Targets to invoke when this rule matches an event.
     *
     * Input will be the full matched event. If you wish to specify custom
     * target input, use `addTarget(target[, inputOptions])`.
     *
     * @default - No targets.
     * @experimental
     */
    readonly targets?: IRuleTarget[];
    /**
     * (experimental) The event bus to associate with this rule.
     *
     * @default - The default event bus.
     * @experimental
     */
    readonly eventBus?: IEventBus;
}
/**
 * (experimental) Defines an EventBridge Rule in this stack.
 *
 * @experimental
 * @resource AWS::Events::Rule
 */
export declare class Rule extends Resource implements IRule {
    /**
     * (experimental) Import an existing EventBridge Rule provided an ARN.
     *
     * @param scope The parent creating construct (usually `this`).
     * @param id The construct's name.
     * @param eventRuleArn Event Rule ARN (i.e. arn:aws:events:<region>:<account-id>:rule/MyScheduledRule).
     * @experimental
     */
    static fromEventRuleArn(scope: Construct, id: string, eventRuleArn: string): IRule;
    /**
     * (experimental) The value of the event rule Amazon Resource Name (ARN), such as arn:aws:events:us-east-2:123456789012:rule/example.
     *
     * @experimental
     */
    readonly ruleArn: string;
    /**
     * (experimental) The name event rule.
     *
     * @experimental
     */
    readonly ruleName: string;
    private readonly targets;
    private readonly eventPattern;
    private readonly scheduleExpression?;
    private readonly description?;
    private readonly accountEventBusTargets;
    /**
     * @experimental
     */
    constructor(scope: Construct, id: string, props?: RuleProps);
    /**
     * (experimental) Adds a target to the rule. The abstract class RuleTarget can be extended to define new targets.
     *
     * No-op if target is undefined.
     *
     * @experimental
     */
    addTarget(target?: IRuleTarget): void;
    /**
     * (experimental) Adds an event pattern filter to this rule.
     *
     * If a pattern was already specified,
     * these values are merged into the existing pattern.
     *
     * For example, if the rule already contains the pattern:
     *
     *     {
     *       "resources": [ "r1" ],
     *       "detail": {
     *         "hello": [ 1 ]
     *       }
     *     }
     *
     * And `addEventPattern` is called with the pattern:
     *
     *     {
     *       "resources": [ "r2" ],
     *       "detail": {
     *         "foo": [ "bar" ]
     *       }
     *     }
     *
     * The resulting event pattern will be:
     *
     *     {
     *       "resources": [ "r1", "r2" ],
     *       "detail": {
     *         "hello": [ 1 ],
     *         "foo": [ "bar" ]
     *       }
     *     }
     *
     * @experimental
     */
    addEventPattern(eventPattern?: EventPattern): void;
    /**
     * Not private only to be overrideen in CopyRule.
     *
     * @internal
     */
    _renderEventPattern(): any;
    /**
     * @experimental
     */
    protected validateRule(): string[];
    private renderTargets;
}
