import type { Construct } from 'constructs';
import type { ICfnConditionExpression } from './cfn-condition';
import { CfnRefElement } from './cfn-element';
/**
 * A rule can include a RuleCondition property and must include an Assertions property.
 * For each rule, you can define only one rule condition; you can define one or more asserts within the Assertions property.
 * You define a rule condition and assertions by using rule-specific intrinsic functions.
 *
 * You can use the following rule-specific intrinsic functions to define rule conditions and assertions:
 *
 *  Fn::And
 *  Fn::Contains
 *  Fn::EachMemberEquals
 *  Fn::EachMemberIn
 *  Fn::Equals
 *  Fn::If
 *  Fn::Not
 *  Fn::Or
 *  Fn::RefAll
 *  Fn::ValueOf
 *  Fn::ValueOfAll
 *
 * https://docs.aws.amazon.com/servicecatalog/latest/adminguide/reference-template_constraint_rules.html
 */
export interface CfnRuleProps {
    /**
     * If the rule condition evaluates to false, the rule doesn't take effect.
     * If the function in the rule condition evaluates to true, expressions in each assert are evaluated and applied.
     *
     * @default - Rule's assertions will always take effect.
     */
    readonly ruleCondition?: ICfnConditionExpression;
    /**
     * Assertions which define the rule.
     *
     * @default - No assertions for the rule.
     */
    readonly assertions?: CfnRuleAssertion[];
}
/**
 * The Rules that define template constraints in an AWS Service Catalog portfolio describe when
 * end users can use the template and which values they can specify for parameters that are declared
 * in the AWS CloudFormation template used to create the product they are attempting to use. Rules
 * are useful for preventing end users from inadvertently specifying an incorrect value.
 * For example, you can add a rule to verify whether end users specified a valid subnet in a
 * given VPC or used m1.small instance types for test environments. AWS CloudFormation uses
 * rules to validate parameter values before it creates the resources for the product.
 *
 * A rule can include a RuleCondition property and must include an Assertions property.
 * For each rule, you can define only one rule condition; you can define one or more asserts within the Assertions property.
 * You define a rule condition and assertions by using rule-specific intrinsic functions.
 *
 * @link https://docs.aws.amazon.com/servicecatalog/latest/adminguide/reference-template_constraint_rules.html
 */
export declare class CfnRule extends CfnRefElement {
    private ruleCondition?;
    private assertions?;
    /**
     * Creates and adds a rule.
     * @param scope The parent construct.
     * @param props The rule props.
     */
    constructor(scope: Construct, id: string, props?: CfnRuleProps);
    /**
     * Adds an assertion to the rule.
     * @param condition The expression to evaluation.
     * @param description The description of the assertion.
     */
    addAssertion(condition: ICfnConditionExpression, description: string): void;
    /**
     * @internal
     */
    _toCloudFormation(): object;
}
/**
 * A rule assertion.
 */
export interface CfnRuleAssertion {
    /**
     * The assertion.
     */
    readonly assert: ICfnConditionExpression;
    /**
     * The assertion description.
     */
    readonly assertDescription: string;
}
