import { Construct } from '../core/construct';
import { FnCondition } from './fn';
import { Referenceable } from './stack';
/**
 * 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 RuleProps {
    /**
     * 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.
     */
    ruleCondition?: FnCondition;
    /**
     * Assertions which define the rule.
     */
    assertions?: RuleAssertion[];
}
/**
 * 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 Rule extends Referenceable {
    /**
     * 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.
     */
    ruleCondition?: FnCondition;
    /**
     * Assertions which define the rule.
     */
    assertions?: RuleAssertion[];
    /**
     * Creates and adds a rule.
     * @param parent The parent construct.
     * @param props The rule props.
     */
    constructor(parent: Construct, name: string, props?: RuleProps);
    /**
     * Adds an assertion to the rule.
     * @param condition The expression to evaluation.
     * @param description The description of the assertion.
     */
    addAssertion(condition: FnCondition, description: string): void;
    toCloudFormation(): object;
}
/**
 * A rule assertion.
 */
export interface RuleAssertion {
    /**
     * The assertion.
     */
    assert: FnCondition;
    /**
     * The assertion description.
     */
    assertDescription: string;
}
