use crate::template_section::TopLevelSection;
pub const PSEUDO_PREFIX: &str = "AWS::";
pub const PSEUDO_NO_VALUE: &str = "AWS::NoValue";
pub const PSEUDO_ACCOUNT_ID: &str = "AWS::AccountId";
pub const PSEUDO_NOTIFICATION_ARNS: &str = "AWS::NotificationARNs";
pub const PSEUDO_PARTITION: &str = "AWS::Partition";
pub const PSEUDO_REGION: &str = "AWS::Region";
pub const PSEUDO_STACK_ID: &str = "AWS::StackId";
pub const PSEUDO_STACK_NAME: &str = "AWS::StackName";
pub const PSEUDO_URL_SUFFIX: &str = "AWS::URLSuffix";
pub const PSEUDO_PARAMETERS: &[&str] = &[
PSEUDO_ACCOUNT_ID,
PSEUDO_NOTIFICATION_ARNS,
PSEUDO_NO_VALUE,
PSEUDO_PARTITION,
PSEUDO_REGION,
PSEUDO_STACK_ID,
PSEUDO_STACK_NAME,
PSEUDO_URL_SUFFIX,
];
pub const DEFAULT_ACCOUNT_ID: &str = "123456789012";
pub const DEFAULT_STACK_NAME: &str = "teststack";
pub const SECTION_PARAMETERS: &str = TopLevelSection::Parameters.name();
pub const SECTION_MAPPINGS: &str = TopLevelSection::Mappings.name();
pub const SECTION_CONDITIONS: &str = TopLevelSection::Conditions.name();
pub const SECTION_RESOURCES: &str = TopLevelSection::Resources.name();
pub const SECTION_OUTPUTS: &str = TopLevelSection::Outputs.name();
pub const SECTION_RULES: &str = TopLevelSection::Rules.name();
pub const SECTION_METADATA: &str = TopLevelSection::Metadata.name();
pub const SECTION_GLOBALS: &str = "Globals";
pub const SECTION_FORMAT_VERSION: &str = TopLevelSection::FormatVersion.name();
pub const SECTION_DESCRIPTION: &str = TopLevelSection::Description.name();
pub const SECTION_TRANSFORM: &str = TopLevelSection::Transform.name();
pub const KEY_TYPE: &str = "Type";
pub const KEY_CONDITION: &str = "Condition";
pub const KEY_PROPERTIES: &str = "Properties";
pub const KEY_DEPENDS_ON: &str = "DependsOn";
pub const KEY_DELETION_POLICY: &str = "DeletionPolicy";
pub const KEY_UPDATE_REPLACE_POLICY: &str = "UpdateReplacePolicy";
pub const KEY_UPDATE_POLICY: &str = "UpdatePolicy";
pub const KEY_CREATION_POLICY: &str = "CreationPolicy";
pub const KEY_METADATA: &str = "Metadata";
pub const KEY_DEFAULT: &str = "Default";
pub const KEY_ALLOWED_VALUES: &str = "AllowedValues";
pub const KEY_ALLOWED_PATTERN: &str = "AllowedPattern";
pub const KEY_NO_ECHO: &str = "NoEcho";
pub const KEY_MIN_LENGTH: &str = "MinLength";
pub const KEY_MAX_LENGTH: &str = "MaxLength";
pub const KEY_MIN_VALUE: &str = "MinValue";
pub const KEY_MAX_VALUE: &str = "MaxValue";
pub const KEY_VALUE: &str = "Value";
pub const KEY_EXPORT: &str = "Export";
pub const KEY_NAME: &str = "Name";
pub const KEY_CONSTRAINT_DESCRIPTION: &str = "ConstraintDescription";
pub const KEY_DEFAULT_VALUE: &str = "DefaultValue";
pub const KEY_STACK_NAME: &str = "StackName";
pub const KEY_OUTPUT_NAME: &str = "OutputName";
pub const KEY_REGION: &str = "Region";
pub const KEY_ROLE_ARN: &str = "RoleArn";
pub const SAM_SERVERLESS_TYPE_PREFIX: &str = "AWS::Serverless::";
pub const SAM_FUNCTION_TYPE: &str = "AWS::Serverless::Function";
pub const SAM_API_TYPE: &str = "AWS::Serverless::Api";
pub const SAM_HTTP_API_TYPE: &str = "AWS::Serverless::HttpApi";
pub const SAM_SIMPLE_TABLE_TYPE: &str = "AWS::Serverless::SimpleTable";
pub const SAM_LAYER_VERSION_TYPE: &str = "AWS::Serverless::LayerVersion";
pub const SAM_APPLICATION_TYPE: &str = "AWS::Serverless::Application";
pub const SAM_STATE_MACHINE_TYPE: &str = "AWS::Serverless::StateMachine";
pub const SAM_CONNECTOR_TYPE: &str = "AWS::Serverless::Connector";
pub const SAM_GRAPHQL_API_TYPE: &str = "AWS::Serverless::GraphQLApi";
pub const DYNAMODB_TABLE_TYPE: &str = "AWS::DynamoDB::Table";
pub const CLOUDFORMATION_STACK_TYPE: &str = "AWS::CloudFormation::Stack";
pub fn effective_deployed_resource_type(resource_type: &str) -> &str {
match resource_type {
SAM_SIMPLE_TABLE_TYPE => DYNAMODB_TABLE_TYPE,
SAM_APPLICATION_TYPE => CLOUDFORMATION_STACK_TYPE,
_ => resource_type,
}
}
pub const SAM_EVENT_TYPE_API: &str = "Api";
pub const SAM_EVENT_TYPE_HTTP_API: &str = "HttpApi";
pub const SAM_EVENT_TYPE_SCHEDULE: &str = "Schedule";
pub const SAM_IMPLICIT_REST_API: &str = "ServerlessRestApi";
pub const SAM_IMPLICIT_HTTP_API: &str = "ServerlessHttpApi";
pub const SAM_IMPLICIT_REST_API_STAGE: &str = "ServerlessRestApiProdStage";
pub const SAM_AUTO_PUBLISH_ALIAS: &str = "AutoPublishAlias";
pub const SAM_LAYER_CONTENT_URI: &str = "ContentUri";
pub const SAM_APPLICATION_LOCATION: &str = "Location";
pub const SAM_FUNCTION_EVENTS: &str = "Events";
pub const SAM_FUNCTION_ROLE: &str = "Role";
pub const SAM_SCHEDULE_PROPERTY: &str = "Schedule";
pub const SAM_API_STAGE_NAME: &str = "StageName";
pub const SAM_DEFINITION: &str = "Definition";
pub const SAM_DEFINITION_URI: &str = "DefinitionUri";
pub const SAM_CONNECTOR_SOURCE: &str = "Source";
pub const SAM_CONNECTOR_DESTINATION: &str = "Destination";
pub const SAM_CONNECTOR_PERMISSIONS: &str = "Permissions";
pub const SAM_GRAPHQL_AUTH: &str = "Auth";
pub const SAM_SIMPLE_TABLE_PRIMARY_KEY: &str = "PrimaryKey";
pub const SAM_PRIMARY_KEY_TYPE: &str = "Type";
pub const SAM_PRIMARY_KEY_TYPES: &[&str] = &["String", "Number", "Binary"];
pub const SAM_FUNCTION_PACKAGE_TYPE: &str = "PackageType";
pub const SAM_FUNCTION_RUNTIME: &str = "Runtime";
pub const SAM_FUNCTION_HANDLER: &str = "Handler";
pub const SAM_FUNCTION_LAYERS: &str = "Layers";
pub const SAM_FUNCTION_DEAD_LETTER_QUEUE: &str = "DeadLetterQueue";
pub const SAM_FUNCTION_TARGET_ARN: &str = "TargetArn";
pub const SAM_FUNCTION_PROVISIONED_CONCURRENCY: &str = "ProvisionedConcurrencyConfig";
pub const SAM_FUNCTION_CAPACITY_PROVIDER: &str = "CapacityProviderConfig";
pub const SAM_FUNCTION_VPC_CONFIG: &str = "VpcConfig";
pub const SAM_FUNCTION_SCALING_CONFIG: &str = "FunctionScalingConfig";
pub const SAM_FUNCTION_VERSION_DELETION_POLICY: &str = "VersionDeletionPolicy";
pub const SAM_FUNCTION_IMAGE_URI: &str = "ImageUri";
pub const SAM_FUNCTION_IMAGE_CONFIG: &str = "ImageConfig";
pub const SAM_FUNCTION_URL_CONFIG: &str = "FunctionUrlConfig";
pub const SAM_FUNCTION_URL_AUTH_TYPE: &str = "AuthType";
pub const SAM_FUNCTION_DEPLOYMENT_PREFERENCE: &str = "DeploymentPreference";
pub const SAM_PACKAGE_TYPE_ZIP: &str = "Zip";
pub const SAM_PACKAGE_TYPE_IMAGE: &str = "Image";
pub const SAM_DLQ_TYPES: &[&str] = &["SQS", "SNS"];
pub const SAM_FUNCTION_URL_AUTH_TYPES: &[&str] = &["AWS_IAM", "NONE"];
pub const SAM_LAYER_RETENTION_POLICY: &str = "RetentionPolicy";
pub const SAM_LAYER_COMPATIBLE_ARCHITECTURES: &str = "CompatibleArchitectures";
pub const SAM_LAYER_RETENTION_POLICIES: &[&str] = &["Retain", "Delete"];
pub const SAM_ARCHITECTURES: &[&str] = &["x86_64", "arm64"];
pub const SAM_GLOBALS_TYPE_MAP: &[(&str, &str)] = &[
(SAM_FUNCTION_GLOBALS_KEY, SAM_FUNCTION_TYPE),
(SAM_API_GLOBALS_KEY, SAM_API_TYPE),
(SAM_HTTP_API_GLOBALS_KEY, SAM_HTTP_API_TYPE),
(SAM_SIMPLE_TABLE_GLOBALS_KEY, SAM_SIMPLE_TABLE_TYPE),
];
pub const SAM_FUNCTION_GLOBALS_KEY: &str = "Function";
pub const SAM_API_GLOBALS_KEY: &str = "Api";
pub const SAM_HTTP_API_GLOBALS_KEY: &str = "HttpApi";
pub const SAM_SIMPLE_TABLE_GLOBALS_KEY: &str = "SimpleTable";
pub const CDK_METADATA_TYPE: &str = "AWS::CDK::Metadata";
pub const OUTPUT_PSEUDO_RESOURCE_PREFIX: &str = "__output__";
pub const OUTPUTS_PSEUDO_RESOURCE: &str = "__outputs__";
pub const PARAM_UNKNOWN_SENTINEL: &str = "__unknown__";
pub const RULE_PSEUDO_RESOURCE_PREFIX: &str = "__rule__";
pub const MAX_TEMPLATE_SIZE_BYTES: usize = 10 * 1024 * 1024;
pub const MAX_SCENARIO_COMBINATIONS: usize = 262_144;
pub const MAX_TOTAL_SCENARIO_COMBINATIONS: u64 = 33_554_432;
pub const MAX_COMPLETE_SCENARIO_PRODUCT: usize = 4_096;
pub const MAX_SCENARIO_PRODUCT_NODES: usize = 1 << 20;
pub const MAX_RESOLVE_DEPTH: u32 = 512;
pub const MAX_YAML_NESTING_DEPTH: usize = 512;
pub const MAX_YAML_ALIAS_EXPANSION_NODES: usize = 1 << 20;
pub const MAX_FOREACH_EXPANSION_WORK: u64 = 100_000;
pub const MAX_ENUM_EXPANSION: usize = 4_096;
pub const MAX_FINGERPRINT_DEPTH: u32 = 64;
pub const MAX_SCHEMA_SCENARIO_ASSIGNMENTS: usize = 256;
pub const MAX_SCHEMA_SCENARIO_MERGE_ATTEMPTS: usize = 4_096;
pub const MAX_SCHEMA_MATCH_DEPTH: usize = 16;
pub const MAX_REQUIRED_PROPERTY_COMBINATIONS: usize = 256;
pub const MAX_SAT_ITERATIONS: u64 = 1_000_000;
pub const MAX_PARAM_COMBINATIONS: u64 = 1_048_576;
pub const MAX_TOTAL_SAT_ITERATIONS: u64 = 100_000_000;
pub const FORMAT_VERSION: &str = "2010-09-09";
pub const MARKER_DYNAMIC: &str = "__dynamic";
pub const MARKER_REF: &str = "__ref";
pub const SUB_PARTIAL_PREFIX: &str = "Sub:";
pub const JOIN_PARTIAL_PREFIX: &str = "Join:";
pub const UNRESOLVED_REF_PLACEHOLDER_PREFIX: &str = "{ref:";
pub const UNRESOLVED_DYNAMIC_PLACEHOLDER: &str = "{dynamic}";
pub const MARKER_CONDITIONAL: &str = "__conditional";
pub const MARKER_INTRINSIC: &str = "__intrinsic";
pub const MARKER_ENUM: &str = "__enum";
pub const MARKER_PARAM_TYPE: &str = "__param_type";
pub const MARKER_KIND: &str = "__kind";
pub const MARKER_IF_TRUE: &str = "__if_true";
pub const MARKER_IF_FALSE: &str = "__if_false";
pub const KEY_RULE_CONDITION: &str = "RuleCondition";
pub const KEY_ASSERTIONS: &str = "Assertions";
pub const KEY_ASSERT: &str = "Assert";
pub const KEY_ASSERT_DESCRIPTION: &str = "AssertDescription";
pub const FN_PREFIX: &str = "Fn::";
pub const FN_REF: &str = "Ref";
pub const FN_GET_ATT: &str = "Fn::GetAtt";
pub const FN_SUB: &str = "Fn::Sub";
pub const FN_JOIN: &str = "Fn::Join";
pub const FN_SELECT: &str = "Fn::Select";
pub const FN_IF: &str = "Fn::If";
pub const FN_FIND_IN_MAP: &str = "Fn::FindInMap";
pub const FN_SPLIT: &str = "Fn::Split";
pub const FN_BASE64: &str = "Fn::Base64";
pub const FN_CIDR: &str = "Fn::Cidr";
pub const FN_GET_AZS: &str = "Fn::GetAZs";
pub const FN_GET_STACK_OUTPUT: &str = "Fn::GetStackOutput";
pub const FN_IMPORT_VALUE: &str = "Fn::ImportValue";
pub const FN_TRANSFORM: &str = "Fn::Transform";
pub const FN_AND: &str = "Fn::And";
pub const FN_OR: &str = "Fn::Or";
pub const FN_NOT: &str = "Fn::Not";
pub const FN_EQUALS: &str = "Fn::Equals";
pub const FN_TO_JSON_STRING: &str = "Fn::ToJsonString";
pub const FN_LENGTH: &str = "Fn::Length";
pub const FN_FOR_EACH: &str = "Fn::ForEach";
pub const FN_CONDITION: &str = "Condition";
pub const FN_VALUE_OF: &str = "Fn::ValueOf";
pub const FN_VALUE_OF_ALL: &str = "Fn::ValueOfAll";
pub const FN_REF_ALL: &str = "Fn::RefAll";
pub const FN_CONTAINS: &str = "Fn::Contains";
pub const FN_EACH_MEMBER_EQUALS: &str = "Fn::EachMemberEquals";
pub const FN_EACH_MEMBER_IN: &str = "Fn::EachMemberIn";
pub const FN_FOR_EACH_KEY_PREFIX: &str = "Fn::ForEach::";
pub const INTRINSIC_FN_PATH_SEGMENTS: &[&str] = &[
FN_GET_ATT,
FN_SUB,
FN_JOIN,
FN_SELECT,
FN_IF,
FN_FIND_IN_MAP,
FN_SPLIT,
FN_BASE64,
FN_CIDR,
FN_GET_AZS,
FN_GET_STACK_OUTPUT,
FN_IMPORT_VALUE,
FN_TRANSFORM,
FN_AND,
FN_OR,
FN_NOT,
FN_EQUALS,
FN_TO_JSON_STRING,
FN_LENGTH,
FN_FOR_EACH,
FN_VALUE_OF,
FN_VALUE_OF_ALL,
FN_REF_ALL,
FN_CONTAINS,
FN_EACH_MEMBER_EQUALS,
FN_EACH_MEMBER_IN,
];
pub const SSM_SECURE_ALLOWED_PROPERTY_PATHS: &[&str] = &[
"Resources/AWS::DirectoryService::MicrosoftAD/Properties/Password",
"Resources/AWS::DirectoryService::SimpleAD/Properties/Password",
"Resources/AWS::ElastiCache::ReplicationGroup/Properties/AuthToken",
"Resources/AWS::IAM::User/Properties/LoginProfile/Password",
"Resources/AWS::KinesisFirehose::DeliveryStream/Properties/RedshiftDestinationConfiguration/Password",
"Resources/AWS::OpsWorks::App/Properties/AppSource/Password",
"Resources/AWS::OpsWorks::Stack/Properties/RdsDbInstances/*/DbPassword",
"Resources/AWS::OpsWorks::Stack/Properties/CustomCookbooksSource/Password",
"Resources/AWS::RDS::DBCluster/Properties/MasterUserPassword",
"Resources/AWS::RDS::DBInstance/Properties/MasterUserPassword",
"Resources/AWS::Redshift::Cluster/Properties/MasterUserPassword",
];
pub const YAML_MERGE_KEY: &str = "<<";
pub const TAG_REF: &str = "Ref";
pub const TAG_GET_ATT: &str = "GetAtt";
pub const TAG_SUB: &str = "Sub";
pub const TAG_JOIN: &str = "Join";
pub const TAG_SELECT: &str = "Select";
pub const TAG_IF: &str = "If";
pub const TAG_FIND_IN_MAP: &str = "FindInMap";
pub const TAG_SPLIT: &str = "Split";
pub const TAG_BASE64: &str = "Base64";
pub const TAG_CIDR: &str = "Cidr";
pub const TAG_GET_AZS: &str = "GetAZs";
pub const TAG_GET_STACK_OUTPUT: &str = "GetStackOutput";
pub const TAG_IMPORT_VALUE: &str = "ImportValue";
pub const TAG_TRANSFORM: &str = "Transform";
pub const TAG_AND: &str = "And";
pub const TAG_OR: &str = "Or";
pub const TAG_NOT: &str = "Not";
pub const TAG_EQUALS: &str = "Equals";
pub const TAG_CONDITION: &str = "Condition";
pub const TAG_TO_JSON_STRING: &str = "ToJsonString";
pub const TAG_LENGTH: &str = "Length";
pub const TAG_FOR_EACH: &str = "ForEach";
pub const TAG_VALUE_OF: &str = "ValueOf";
pub const TAG_VALUE_OF_ALL: &str = "ValueOfAll";
pub const TAG_REF_ALL: &str = "RefAll";
pub const TAG_CONTAINS: &str = "Contains";
pub const TAG_EACH_MEMBER_EQUALS: &str = "EachMemberEquals";
pub const TAG_EACH_MEMBER_IN: &str = "EachMemberIn";
pub const TAG_IF_EXPR: &str = "IfExpr";
pub const SHORT_TAG_TO_FN_KEY: &[(&str, &str)] = &[
(TAG_REF, FN_REF),
(TAG_GET_ATT, FN_GET_ATT),
(TAG_SUB, FN_SUB),
(TAG_JOIN, FN_JOIN),
(TAG_SELECT, FN_SELECT),
(TAG_IF, FN_IF),
(TAG_FIND_IN_MAP, FN_FIND_IN_MAP),
(TAG_SPLIT, FN_SPLIT),
(TAG_BASE64, FN_BASE64),
(TAG_CIDR, FN_CIDR),
(TAG_GET_AZS, FN_GET_AZS),
(TAG_GET_STACK_OUTPUT, FN_GET_STACK_OUTPUT),
(TAG_IMPORT_VALUE, FN_IMPORT_VALUE),
(TAG_TRANSFORM, FN_TRANSFORM),
(TAG_AND, FN_AND),
(TAG_OR, FN_OR),
(TAG_NOT, FN_NOT),
(TAG_EQUALS, FN_EQUALS),
(TAG_CONDITION, FN_CONDITION),
(TAG_TO_JSON_STRING, FN_TO_JSON_STRING),
(TAG_LENGTH, FN_LENGTH),
(TAG_FOR_EACH, FN_FOR_EACH),
(TAG_VALUE_OF, FN_VALUE_OF),
(TAG_VALUE_OF_ALL, FN_VALUE_OF_ALL),
(TAG_REF_ALL, FN_REF_ALL),
(TAG_CONTAINS, FN_CONTAINS),
(TAG_EACH_MEMBER_EQUALS, FN_EACH_MEMBER_EQUALS),
(TAG_EACH_MEMBER_IN, FN_EACH_MEMBER_IN),
];
pub const BOOLEAN_FN_KEYS: &[&str] =
&[FN_CONDITION, FN_EQUALS, FN_AND, FN_OR, FN_NOT, FN_CONTAINS, FN_EACH_MEMBER_EQUALS, FN_EACH_MEMBER_IN];
pub const EQUALS_ARG_FN_KEYS: &[&str] =
&[FN_REF, FN_FIND_IN_MAP, FN_SUB, FN_JOIN, FN_SELECT, FN_SPLIT, FN_LENGTH, FN_TO_JSON_STRING];
pub const EDGE_KIND_REF: &str = "Ref";
pub const EDGE_KIND_GET_ATT: &str = "GetAtt";
pub const EDGE_KIND_SUB: &str = "Sub";
pub const EDGE_KIND_DEPENDS_ON: &str = "DependsOn";
pub const EDGE_KIND_SELECT: &str = "Select";
pub const EDGE_KIND_CONDITION: &str = "Condition";
pub const FIELD_RESOURCES: &str = "resources";
pub const FIELD_PARAMETERS: &str = "parameters";
pub const FIELD_CONDITIONS: &str = "conditions";
pub const FIELD_MAPPINGS: &str = "mappings";
pub const FIELD_OUTPUTS: &str = "outputs";
pub const FIELD_EDGES: &str = "edges";
pub const FIELD_TRANSFORMS: &str = "transforms";
pub const FIELD_RESOURCE_TYPE: &str = "resourceType";
pub const FIELD_PROPERTIES: &str = "properties";
pub const FIELD_DEPENDS_ON: &str = "dependsOn";
pub const FIELD_CONDITION: &str = "condition";
pub const FIELD_OUTGOING_REFS: &str = "outgoingRefs";
pub const FIELD_INCOMING_REFS: &str = "incomingRefs";
pub const FIELD_DELETION_POLICY: &str = "deletionPolicy";
pub const FIELD_UPDATE_REPLACE_POLICY: &str = "updateReplacePolicy";
pub const FIELD_CREATION_POLICY: &str = "creationPolicy";
pub const FIELD_UPDATE_POLICY: &str = "updatePolicy";
pub const FIELD_KIND: &str = "kind";
pub const FIELD_TARGET: &str = "target";
pub const FIELD_SOURCE: &str = "source";
pub const FIELD_SOURCE_PATH: &str = "sourcePath";
pub const FIELD_ATTR: &str = "attr";
pub const FIELD_CONDITION_CONTEXT: &str = "conditionContext";
pub const TRANSFORM_LANGUAGE_EXTENSIONS: &str = "AWS::LanguageExtensions";
pub const TRANSFORM_SERVERLESS: &str = "AWS::Serverless-2016-10-31";
pub const TRANSFORM_INCLUDE: &str = "AWS::Include";
pub const POLICY_DELETE: &str = "Delete";
pub const POLICY_RETAIN: &str = "Retain";
pub const POLICY_SNAPSHOT: &str = "Snapshot";
pub const POLICY_RETAIN_EXCEPT_ON_CREATE: &str = "RetainExceptOnCreate";
pub const CONDITION_REF_PREFIX: &str = "Condition:";
pub const PARAM_TYPE_STRING: &str = "String";
pub const PARAM_TYPE_NUMBER: &str = "Number";
pub const PARAM_TYPE_COMMA_DELIMITED_LIST: &str = "CommaDelimitedList";
pub const SSM_PARAMETER_VALUE_TYPE_PREFIX: &str = "AWS::SSM::Parameter::Value<";
pub const SAM_TRANSFORM_ERROR_RULE_ID: &str = "E0001";
pub const SAM_TRANSFORM_ERROR_PREFIX: &str = "Error transforming template:";
pub fn is_sam_transform_error_message(message: &str) -> bool {
message.starts_with(SAM_TRANSFORM_ERROR_PREFIX)
}