//! Generated input-constraint table (do not edit by hand).
//!
//! Emitted from `aws-models/es.json` + `aws-models/opensearch.json`: each entry
//! mirrors a top-level input member's Smithy constraint. Query members use
//! their `@httpQuery` wire name; label length/enum bounds are validated too.
//! Negative conformance variants are thereby rejected with
//! `ValidationException`, matching real AWS.

use super::service::{Api, Rule, Src};

pub(crate) fn input_rules(api: Api, action: &str) -> &'static [Rule] {
    match (api, action) {
        (Api::Es, "AddTags") => &[
            Rule::Required("ARN", Src::Body),
            Rule::Required("TagList", Src::Body),
        ],
        (Api::Es, "AssociatePackage") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
        ],
        (Api::Es, "AuthorizeVpcEndpointAccess") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
            Rule::Required("Account", Src::Body),
        ],
        (Api::Es, "CancelDomainConfigChange") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
        ],
        (Api::Es, "CancelElasticsearchServiceSoftwareUpdate") => &[
            Rule::Required("DomainName", Src::Body),
            Rule::LenMin("DomainName", Src::Body, 3),
            Rule::LenMax("DomainName", Src::Body, 28),
        ],
        (Api::Es, "CreateElasticsearchDomain") => &[
            Rule::Required("DomainName", Src::Body),
            Rule::LenMin("DomainName", Src::Body, 3),
            Rule::LenMax("DomainName", Src::Body, 28),
        ],
        (Api::Es, "CreateOutboundCrossClusterSearchConnection") => &[
            Rule::Required("SourceDomainInfo", Src::Body),
            Rule::Required("DestinationDomainInfo", Src::Body),
            Rule::Required("ConnectionAlias", Src::Body),
            Rule::LenMin("ConnectionAlias", Src::Body, 0),
            Rule::LenMax("ConnectionAlias", Src::Body, 20),
        ],
        (Api::Es, "CreatePackage") => &[
            Rule::Required("PackageName", Src::Body),
            Rule::LenMin("PackageName", Src::Body, 3),
            Rule::LenMax("PackageName", Src::Body, 28),
            Rule::Required("PackageType", Src::Body),
            Rule::Enum("PackageType", Src::Body, &["TXT-DICTIONARY"]),
            Rule::LenMin("PackageDescription", Src::Body, 0),
            Rule::LenMax("PackageDescription", Src::Body, 1024),
            Rule::Required("PackageSource", Src::Body),
        ],
        (Api::Es, "CreateVpcEndpoint") => &[
            Rule::Required("DomainArn", Src::Body),
            Rule::LenMin("DomainArn", Src::Body, 1),
            Rule::LenMax("DomainArn", Src::Body, 512),
            Rule::Required("VpcOptions", Src::Body),
            Rule::LenMin("ClientToken", Src::Body, 1),
            Rule::LenMax("ClientToken", Src::Body, 64),
        ],
        (Api::Es, "DeleteElasticsearchDomain") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
        ],
        (Api::Es, "DeleteVpcEndpoint") => &[
            Rule::LenMin("VpcEndpointId", Src::Label, 5),
            Rule::LenMax("VpcEndpointId", Src::Label, 256),
        ],
        (Api::Es, "DescribeDomainAutoTunes") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
            Rule::RangeMax("maxResults", Src::Query, 100),
        ],
        (Api::Es, "DescribeDomainChangeProgress") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
        ],
        (Api::Es, "DescribeElasticsearchDomain") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
        ],
        (Api::Es, "DescribeElasticsearchDomainConfig") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
        ],
        (Api::Es, "DescribeElasticsearchDomains") => &[Rule::Required("DomainNames", Src::Body)],
        (Api::Es, "DescribeElasticsearchInstanceTypeLimits") => &[
            Rule::LenMin("domainName", Src::Query, 3),
            Rule::LenMax("domainName", Src::Query, 28),
            Rule::Enum(
                "InstanceType",
                Src::Label,
                &[
                    "m3.medium.elasticsearch",
                    "m3.large.elasticsearch",
                    "m3.xlarge.elasticsearch",
                    "m3.2xlarge.elasticsearch",
                    "m4.large.elasticsearch",
                    "m4.xlarge.elasticsearch",
                    "m4.2xlarge.elasticsearch",
                    "m4.4xlarge.elasticsearch",
                    "m4.10xlarge.elasticsearch",
                    "m5.large.elasticsearch",
                    "m5.xlarge.elasticsearch",
                    "m5.2xlarge.elasticsearch",
                    "m5.4xlarge.elasticsearch",
                    "m5.12xlarge.elasticsearch",
                    "r5.large.elasticsearch",
                    "r5.xlarge.elasticsearch",
                    "r5.2xlarge.elasticsearch",
                    "r5.4xlarge.elasticsearch",
                    "r5.12xlarge.elasticsearch",
                    "c5.large.elasticsearch",
                    "c5.xlarge.elasticsearch",
                    "c5.2xlarge.elasticsearch",
                    "c5.4xlarge.elasticsearch",
                    "c5.9xlarge.elasticsearch",
                    "c5.18xlarge.elasticsearch",
                    "ultrawarm1.medium.elasticsearch",
                    "ultrawarm1.large.elasticsearch",
                    "t2.micro.elasticsearch",
                    "t2.small.elasticsearch",
                    "t2.medium.elasticsearch",
                    "r3.large.elasticsearch",
                    "r3.xlarge.elasticsearch",
                    "r3.2xlarge.elasticsearch",
                    "r3.4xlarge.elasticsearch",
                    "r3.8xlarge.elasticsearch",
                    "i2.xlarge.elasticsearch",
                    "i2.2xlarge.elasticsearch",
                    "d2.xlarge.elasticsearch",
                    "d2.2xlarge.elasticsearch",
                    "d2.4xlarge.elasticsearch",
                    "d2.8xlarge.elasticsearch",
                    "c4.large.elasticsearch",
                    "c4.xlarge.elasticsearch",
                    "c4.2xlarge.elasticsearch",
                    "c4.4xlarge.elasticsearch",
                    "c4.8xlarge.elasticsearch",
                    "r4.large.elasticsearch",
                    "r4.xlarge.elasticsearch",
                    "r4.2xlarge.elasticsearch",
                    "r4.4xlarge.elasticsearch",
                    "r4.8xlarge.elasticsearch",
                    "r4.16xlarge.elasticsearch",
                    "i3.large.elasticsearch",
                    "i3.xlarge.elasticsearch",
                    "i3.2xlarge.elasticsearch",
                    "i3.4xlarge.elasticsearch",
                    "i3.8xlarge.elasticsearch",
                    "i3.16xlarge.elasticsearch",
                ],
            ),
        ],
        (Api::Es, "DescribeInboundCrossClusterSearchConnections") => {
            &[Rule::RangeMax("MaxResults", Src::Body, 100)]
        }
        (Api::Es, "DescribeOutboundCrossClusterSearchConnections") => {
            &[Rule::RangeMax("MaxResults", Src::Body, 100)]
        }
        (Api::Es, "DescribePackages") => &[Rule::RangeMax("MaxResults", Src::Body, 100)],
        (Api::Es, "DescribeReservedElasticsearchInstanceOfferings") => {
            &[Rule::RangeMax("maxResults", Src::Query, 100)]
        }
        (Api::Es, "DescribeReservedElasticsearchInstances") => {
            &[Rule::RangeMax("maxResults", Src::Query, 100)]
        }
        (Api::Es, "DescribeVpcEndpoints") => &[Rule::Required("VpcEndpointIds", Src::Body)],
        (Api::Es, "DissociatePackage") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
        ],
        (Api::Es, "GetCompatibleElasticsearchVersions") => &[
            Rule::LenMin("domainName", Src::Query, 3),
            Rule::LenMax("domainName", Src::Query, 28),
        ],
        (Api::Es, "GetPackageVersionHistory") => &[Rule::RangeMax("maxResults", Src::Query, 100)],
        (Api::Es, "GetUpgradeHistory") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
            Rule::RangeMax("maxResults", Src::Query, 100),
        ],
        (Api::Es, "GetUpgradeStatus") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
        ],
        (Api::Es, "ListDomainNames") => &[Rule::Enum(
            "engineType",
            Src::Query,
            &["OpenSearch", "Elasticsearch"],
        )],
        (Api::Es, "ListDomainsForPackage") => &[Rule::RangeMax("maxResults", Src::Query, 100)],
        (Api::Es, "ListElasticsearchInstanceTypes") => &[
            Rule::LenMin("domainName", Src::Query, 3),
            Rule::LenMax("domainName", Src::Query, 28),
            Rule::RangeMax("maxResults", Src::Query, 100),
        ],
        (Api::Es, "ListElasticsearchVersions") => &[Rule::RangeMax("maxResults", Src::Query, 100)],
        (Api::Es, "ListPackagesForDomain") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
            Rule::RangeMax("maxResults", Src::Query, 100),
        ],
        (Api::Es, "ListTags") => &[Rule::Required("arn", Src::Query)],
        (Api::Es, "ListVpcEndpointAccess") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
        ],
        (Api::Es, "ListVpcEndpointsForDomain") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
        ],
        (Api::Es, "PurchaseReservedElasticsearchInstanceOffering") => &[
            Rule::Required("ReservedElasticsearchInstanceOfferingId", Src::Body),
            Rule::Required("ReservationName", Src::Body),
            Rule::LenMin("ReservationName", Src::Body, 5),
            Rule::LenMax("ReservationName", Src::Body, 64),
            Rule::RangeMin("InstanceCount", Src::Body, 1),
        ],
        (Api::Es, "RemoveTags") => &[
            Rule::Required("ARN", Src::Body),
            Rule::Required("TagKeys", Src::Body),
        ],
        (Api::Es, "RevokeVpcEndpointAccess") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
            Rule::Required("Account", Src::Body),
        ],
        (Api::Es, "StartElasticsearchServiceSoftwareUpdate") => &[
            Rule::Required("DomainName", Src::Body),
            Rule::LenMin("DomainName", Src::Body, 3),
            Rule::LenMax("DomainName", Src::Body, 28),
        ],
        (Api::Es, "UpdateElasticsearchDomainConfig") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
        ],
        (Api::Es, "UpdatePackage") => &[
            Rule::Required("PackageID", Src::Body),
            Rule::Required("PackageSource", Src::Body),
            Rule::LenMin("PackageDescription", Src::Body, 0),
            Rule::LenMax("PackageDescription", Src::Body, 1024),
            Rule::LenMin("CommitMessage", Src::Body, 0),
            Rule::LenMax("CommitMessage", Src::Body, 160),
        ],
        (Api::Es, "UpdateVpcEndpoint") => &[
            Rule::Required("VpcEndpointId", Src::Body),
            Rule::LenMin("VpcEndpointId", Src::Body, 5),
            Rule::LenMax("VpcEndpointId", Src::Body, 256),
            Rule::Required("VpcOptions", Src::Body),
        ],
        (Api::Es, "UpgradeElasticsearchDomain") => &[
            Rule::Required("DomainName", Src::Body),
            Rule::LenMin("DomainName", Src::Body, 3),
            Rule::LenMax("DomainName", Src::Body, 28),
            Rule::Required("TargetVersion", Src::Body),
        ],
        (Api::OpenSearch, "AcceptInboundConnection") => &[
            Rule::LenMin("ConnectionId", Src::Label, 10),
            Rule::LenMax("ConnectionId", Src::Label, 256),
        ],
        (Api::OpenSearch, "AddDataSource") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
            Rule::Required("Name", Src::Body),
            Rule::LenMin("Name", Src::Body, 3),
            Rule::LenMax("Name", Src::Body, 80),
            Rule::Required("DataSourceType", Src::Body),
            Rule::LenMin("Description", Src::Body, 0),
            Rule::LenMax("Description", Src::Body, 1000),
        ],
        (Api::OpenSearch, "AddDirectQueryDataSource") => &[
            Rule::Required("DataSourceName", Src::Body),
            Rule::LenMin("DataSourceName", Src::Body, 3),
            Rule::LenMax("DataSourceName", Src::Body, 80),
            Rule::Required("DataSourceType", Src::Body),
            Rule::LenMin("Description", Src::Body, 0),
            Rule::LenMax("Description", Src::Body, 1000),
            Rule::LenMin("DataSourceAccessPolicy", Src::Body, 0),
        ],
        (Api::OpenSearch, "AddTags") => &[
            Rule::Required("ARN", Src::Body),
            Rule::LenMin("ARN", Src::Body, 20),
            Rule::LenMax("ARN", Src::Body, 2048),
            Rule::Required("TagList", Src::Body),
        ],
        (Api::OpenSearch, "AssociatePackage") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
        ],
        (Api::OpenSearch, "AssociatePackages") => &[
            Rule::Required("PackageList", Src::Body),
            Rule::Required("DomainName", Src::Body),
            Rule::LenMin("DomainName", Src::Body, 3),
            Rule::LenMax("DomainName", Src::Body, 28),
        ],
        (Api::OpenSearch, "AttachDataSource") => &[
            Rule::Required("dataSourceArn", Src::Body),
            Rule::LenMin("dataSourceArn", Src::Body, 20),
            Rule::LenMax("dataSourceArn", Src::Body, 2048),
            Rule::LenMin("clientToken", Src::Body, 1),
            Rule::LenMax("clientToken", Src::Body, 64),
        ],
        (Api::OpenSearch, "AuthorizeVpcEndpointAccess") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
            Rule::Enum(
                "Service",
                Src::Body,
                &["application.opensearchservice.amazonaws.com"],
            ),
        ],
        (Api::OpenSearch, "CancelDomainConfigChange") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
        ],
        (Api::OpenSearch, "CancelServiceSoftwareUpdate") => &[
            Rule::Required("DomainName", Src::Body),
            Rule::LenMin("DomainName", Src::Body, 3),
            Rule::LenMax("DomainName", Src::Body, 28),
        ],
        (Api::OpenSearch, "CreateApplication") => &[
            Rule::LenMin("clientToken", Src::Body, 1),
            Rule::LenMax("clientToken", Src::Body, 64),
            Rule::Required("name", Src::Body),
            Rule::LenMin("name", Src::Body, 3),
            Rule::LenMax("name", Src::Body, 30),
            Rule::LenMin("kmsKeyArn", Src::Body, 20),
            Rule::LenMax("kmsKeyArn", Src::Body, 2048),
        ],
        (Api::OpenSearch, "CreateDomain") => &[
            Rule::Required("DomainName", Src::Body),
            Rule::LenMin("DomainName", Src::Body, 3),
            Rule::LenMax("DomainName", Src::Body, 28),
            Rule::LenMin("EngineVersion", Src::Body, 14),
            Rule::LenMax("EngineVersion", Src::Body, 18),
            Rule::LenMin("AccessPolicies", Src::Body, 0),
            Rule::Enum("IPAddressType", Src::Body, &["ipv4", "dualstack"]),
            Rule::Enum(
                "UseCase",
                Src::Body,
                &["SEARCH", "VECTOR", "OBSERVABILITY", "MIXED"],
            ),
            Rule::Enum("EngineMode", Src::Body, &["GENERAL", "OPTIMIZED"]),
        ],
        (Api::OpenSearch, "CreateIndex") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
            Rule::Required("IndexName", Src::Body),
            Rule::LenMin("IndexName", Src::Body, 1),
            Rule::LenMax("IndexName", Src::Body, 255),
            Rule::Required("IndexSchema", Src::Body),
        ],
        (Api::OpenSearch, "CreateOutboundConnection") => &[
            Rule::Required("LocalDomainInfo", Src::Body),
            Rule::Required("RemoteDomainInfo", Src::Body),
            Rule::Required("ConnectionAlias", Src::Body),
            Rule::LenMin("ConnectionAlias", Src::Body, 2),
            Rule::LenMax("ConnectionAlias", Src::Body, 100),
            Rule::Enum("ConnectionMode", Src::Body, &["DIRECT", "VPC_ENDPOINT"]),
        ],
        (Api::OpenSearch, "CreatePackage") => &[
            Rule::Required("PackageName", Src::Body),
            Rule::LenMin("PackageName", Src::Body, 3),
            Rule::LenMax("PackageName", Src::Body, 256),
            Rule::Required("PackageType", Src::Body),
            Rule::Enum(
                "PackageType",
                Src::Body,
                &[
                    "TXT-DICTIONARY",
                    "ZIP-PLUGIN",
                    "PACKAGE-LICENSE",
                    "PACKAGE-CONFIG",
                ],
            ),
            Rule::LenMin("PackageDescription", Src::Body, 0),
            Rule::LenMax("PackageDescription", Src::Body, 1024),
            Rule::Required("PackageSource", Src::Body),
        ],
        (Api::OpenSearch, "CreateVpcEndpoint") => &[
            Rule::Required("DomainArn", Src::Body),
            Rule::LenMin("DomainArn", Src::Body, 1),
            Rule::LenMax("DomainArn", Src::Body, 512),
            Rule::Required("VpcOptions", Src::Body),
            Rule::LenMin("ClientToken", Src::Body, 1),
            Rule::LenMax("ClientToken", Src::Body, 64),
        ],
        (Api::OpenSearch, "DeleteDataSource") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
            Rule::LenMin("Name", Src::Label, 3),
            Rule::LenMax("Name", Src::Label, 80),
        ],
        (Api::OpenSearch, "DeleteDirectQueryDataSource") => &[
            Rule::LenMin("DataSourceName", Src::Label, 3),
            Rule::LenMax("DataSourceName", Src::Label, 80),
        ],
        (Api::OpenSearch, "DeleteDomain") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
        ],
        (Api::OpenSearch, "DeleteInboundConnection") => &[
            Rule::LenMin("ConnectionId", Src::Label, 10),
            Rule::LenMax("ConnectionId", Src::Label, 256),
        ],
        (Api::OpenSearch, "DeleteIndex") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
            Rule::LenMin("IndexName", Src::Label, 1),
            Rule::LenMax("IndexName", Src::Label, 255),
        ],
        (Api::OpenSearch, "DeleteOutboundConnection") => &[
            Rule::LenMin("ConnectionId", Src::Label, 10),
            Rule::LenMax("ConnectionId", Src::Label, 256),
        ],
        (Api::OpenSearch, "DeleteVpcEndpoint") => &[
            Rule::LenMin("VpcEndpointId", Src::Label, 5),
            Rule::LenMax("VpcEndpointId", Src::Label, 256),
        ],
        (Api::OpenSearch, "DeregisterCapability") => &[
            Rule::LenMin("capabilityName", Src::Label, 3),
            Rule::LenMax("capabilityName", Src::Label, 30),
        ],
        (Api::OpenSearch, "DescribeDataSourceAttachment") => &[
            Rule::Required("dataSourceArn", Src::Body),
            Rule::LenMin("dataSourceArn", Src::Body, 20),
            Rule::LenMax("dataSourceArn", Src::Body, 2048),
        ],
        (Api::OpenSearch, "DescribeDomain") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
        ],
        (Api::OpenSearch, "DescribeDomainAutoTunes") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
            Rule::RangeMax("maxResults", Src::Query, 100),
        ],
        (Api::OpenSearch, "DescribeDomainChangeProgress") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
            Rule::LenMax("changeid", Src::Query, 36),
        ],
        (Api::OpenSearch, "DescribeDomainConfig") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
        ],
        (Api::OpenSearch, "DescribeDomainHealth") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
        ],
        (Api::OpenSearch, "DescribeDomainNodes") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
        ],
        (Api::OpenSearch, "DescribeDomains") => &[Rule::Required("DomainNames", Src::Body)],
        (Api::OpenSearch, "DescribeDryRunProgress") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
            Rule::LenMax("dryRunId", Src::Query, 36),
        ],
        (Api::OpenSearch, "DescribeInboundConnections") => {
            &[Rule::RangeMax("MaxResults", Src::Body, 100)]
        }
        (Api::OpenSearch, "DescribeInsightDetails") => &[
            Rule::Required("Entity", Src::Body),
            Rule::Required("InsightId", Src::Body),
            Rule::LenMax("InsightId", Src::Body, 36),
        ],
        (Api::OpenSearch, "DescribeInstanceTypeLimits") => &[
            Rule::LenMin("domainName", Src::Query, 3),
            Rule::LenMax("domainName", Src::Query, 28),
            Rule::Enum(
                "InstanceType",
                Src::Label,
                &[
                    "m3.medium.search",
                    "m3.large.search",
                    "m3.xlarge.search",
                    "m3.2xlarge.search",
                    "m4.large.search",
                    "m4.xlarge.search",
                    "m4.2xlarge.search",
                    "m4.4xlarge.search",
                    "m4.10xlarge.search",
                    "m5.large.search",
                    "m5.xlarge.search",
                    "m5.2xlarge.search",
                    "m5.4xlarge.search",
                    "m5.12xlarge.search",
                    "m5.24xlarge.search",
                    "r5.large.search",
                    "r5.xlarge.search",
                    "r5.2xlarge.search",
                    "r5.4xlarge.search",
                    "r5.12xlarge.search",
                    "r5.24xlarge.search",
                    "c5.large.search",
                    "c5.xlarge.search",
                    "c5.2xlarge.search",
                    "c5.4xlarge.search",
                    "c5.9xlarge.search",
                    "c5.18xlarge.search",
                    "t3.nano.search",
                    "t3.micro.search",
                    "t3.small.search",
                    "t3.medium.search",
                    "t3.large.search",
                    "t3.xlarge.search",
                    "t3.2xlarge.search",
                    "or1.medium.search",
                    "or1.large.search",
                    "or1.xlarge.search",
                    "or1.2xlarge.search",
                    "or1.4xlarge.search",
                    "or1.8xlarge.search",
                    "or1.12xlarge.search",
                    "or1.16xlarge.search",
                    "ultrawarm1.medium.search",
                    "ultrawarm1.large.search",
                    "ultrawarm1.xlarge.search",
                    "t2.micro.search",
                    "t2.small.search",
                    "t2.medium.search",
                    "r3.large.search",
                    "r3.xlarge.search",
                    "r3.2xlarge.search",
                    "r3.4xlarge.search",
                    "r3.8xlarge.search",
                    "i2.xlarge.search",
                    "i2.2xlarge.search",
                    "d2.xlarge.search",
                    "d2.2xlarge.search",
                    "d2.4xlarge.search",
                    "d2.8xlarge.search",
                    "c4.large.search",
                    "c4.xlarge.search",
                    "c4.2xlarge.search",
                    "c4.4xlarge.search",
                    "c4.8xlarge.search",
                    "r4.large.search",
                    "r4.xlarge.search",
                    "r4.2xlarge.search",
                    "r4.4xlarge.search",
                    "r4.8xlarge.search",
                    "r4.16xlarge.search",
                    "i3.large.search",
                    "i3.xlarge.search",
                    "i3.2xlarge.search",
                    "i3.4xlarge.search",
                    "i3.8xlarge.search",
                    "i3.16xlarge.search",
                    "r6g.large.search",
                    "r6g.xlarge.search",
                    "r6g.2xlarge.search",
                    "r6g.4xlarge.search",
                    "r6g.8xlarge.search",
                    "r6g.12xlarge.search",
                    "m6g.large.search",
                    "m6g.xlarge.search",
                    "m6g.2xlarge.search",
                    "m6g.4xlarge.search",
                    "m6g.8xlarge.search",
                    "m6g.12xlarge.search",
                    "c6g.large.search",
                    "c6g.xlarge.search",
                    "c6g.2xlarge.search",
                    "c6g.4xlarge.search",
                    "c6g.8xlarge.search",
                    "c6g.12xlarge.search",
                    "r6gd.large.search",
                    "r6gd.xlarge.search",
                    "r6gd.2xlarge.search",
                    "r6gd.4xlarge.search",
                    "r6gd.8xlarge.search",
                    "r6gd.12xlarge.search",
                    "r6gd.16xlarge.search",
                    "t4g.small.search",
                    "t4g.medium.search",
                ],
            ),
            Rule::LenMin("EngineVersion", Src::Label, 14),
            Rule::LenMax("EngineVersion", Src::Label, 18),
        ],
        (Api::OpenSearch, "DescribeOutboundConnections") => {
            &[Rule::RangeMax("MaxResults", Src::Body, 100)]
        }
        (Api::OpenSearch, "DescribePackages") => &[Rule::RangeMax("MaxResults", Src::Body, 100)],
        (Api::OpenSearch, "DescribeReservedInstanceOfferings") => &[
            Rule::LenMax("offeringId", Src::Query, 36),
            Rule::RangeMax("maxResults", Src::Query, 100),
        ],
        (Api::OpenSearch, "DescribeReservedInstances") => &[
            Rule::LenMax("reservationId", Src::Query, 36),
            Rule::RangeMax("maxResults", Src::Query, 100),
        ],
        (Api::OpenSearch, "DescribeVpcEndpoints") => &[Rule::Required("VpcEndpointIds", Src::Body)],
        (Api::OpenSearch, "DetachDataSource") => &[
            Rule::Required("dataSourceArn", Src::Body),
            Rule::LenMin("dataSourceArn", Src::Body, 20),
            Rule::LenMax("dataSourceArn", Src::Body, 2048),
        ],
        (Api::OpenSearch, "DissociatePackage") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
        ],
        (Api::OpenSearch, "DissociatePackages") => &[
            Rule::Required("PackageList", Src::Body),
            Rule::Required("DomainName", Src::Body),
            Rule::LenMin("DomainName", Src::Body, 3),
            Rule::LenMax("DomainName", Src::Body, 28),
        ],
        (Api::OpenSearch, "GetCapability") => &[
            Rule::LenMin("capabilityName", Src::Label, 3),
            Rule::LenMax("capabilityName", Src::Label, 30),
        ],
        (Api::OpenSearch, "GetCompatibleVersions") => &[
            Rule::LenMin("domainName", Src::Query, 3),
            Rule::LenMax("domainName", Src::Query, 28),
        ],
        (Api::OpenSearch, "GetDataSource") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
            Rule::LenMin("Name", Src::Label, 3),
            Rule::LenMax("Name", Src::Label, 80),
        ],
        (Api::OpenSearch, "GetDirectQueryDataSource") => &[
            Rule::LenMin("DataSourceName", Src::Label, 3),
            Rule::LenMax("DataSourceName", Src::Label, 80),
        ],
        (Api::OpenSearch, "GetDomainMaintenanceStatus") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
            Rule::Required("maintenanceId", Src::Query),
            Rule::LenMin("maintenanceId", Src::Query, 1),
            Rule::LenMax("maintenanceId", Src::Query, 100),
        ],
        (Api::OpenSearch, "GetIndex") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
            Rule::LenMin("IndexName", Src::Label, 1),
            Rule::LenMax("IndexName", Src::Label, 255),
        ],
        (Api::OpenSearch, "GetPackageVersionHistory") => {
            &[Rule::RangeMax("maxResults", Src::Query, 100)]
        }
        (Api::OpenSearch, "GetUpgradeHistory") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
            Rule::RangeMax("maxResults", Src::Query, 100),
        ],
        (Api::OpenSearch, "GetUpgradeStatus") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
        ],
        (Api::OpenSearch, "InsightFeedback") => &[
            Rule::Required("Entity", Src::Body),
            Rule::Required("InsightId", Src::Body),
            Rule::LenMax("InsightId", Src::Body, 36),
            Rule::Required("Thumbs", Src::Body),
            Rule::Enum("Thumbs", Src::Body, &["Up", "Down"]),
            Rule::LenMin("FeedbackText", Src::Body, 0),
            Rule::LenMax("FeedbackText", Src::Body, 1000),
        ],
        (Api::OpenSearch, "ListApplications") => &[Rule::RangeMax("maxResults", Src::Query, 100)],
        (Api::OpenSearch, "ListDataSources") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
        ],
        (Api::OpenSearch, "ListDomainMaintenances") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
            Rule::Enum(
                "action",
                Src::Query,
                &["REBOOT_NODE", "RESTART_SEARCH_PROCESS", "RESTART_DASHBOARD"],
            ),
            Rule::Enum(
                "status",
                Src::Query,
                &["PENDING", "IN_PROGRESS", "COMPLETED", "FAILED", "TIMED_OUT"],
            ),
            Rule::RangeMax("maxResults", Src::Query, 100),
        ],
        (Api::OpenSearch, "ListDomainNames") => &[Rule::Enum(
            "engineType",
            Src::Query,
            &["OpenSearch", "Elasticsearch"],
        )],
        (Api::OpenSearch, "ListDomainsForPackage") => {
            &[Rule::RangeMax("maxResults", Src::Query, 100)]
        }
        (Api::OpenSearch, "ListInsights") => &[
            Rule::Required("Entity", Src::Body),
            Rule::Enum("SortOrder", Src::Body, &["ASC", "DESC"]),
            Rule::RangeMin("MaxResults", Src::Body, 1),
            Rule::RangeMax("MaxResults", Src::Body, 500),
        ],
        (Api::OpenSearch, "ListInstanceTypeDetails") => &[
            Rule::LenMin("EngineVersion", Src::Label, 14),
            Rule::LenMax("EngineVersion", Src::Label, 18),
            Rule::LenMin("domainName", Src::Query, 3),
            Rule::LenMax("domainName", Src::Query, 28),
            Rule::RangeMax("maxResults", Src::Query, 100),
            Rule::LenMin("instanceType", Src::Query, 10),
            Rule::LenMax("instanceType", Src::Query, 40),
        ],
        (Api::OpenSearch, "ListPackagesForDomain") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
            Rule::RangeMax("maxResults", Src::Query, 100),
        ],
        (Api::OpenSearch, "ListScheduledActions") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
            Rule::RangeMax("maxResults", Src::Query, 100),
        ],
        (Api::OpenSearch, "ListTags") => &[
            Rule::Required("arn", Src::Query),
            Rule::LenMin("arn", Src::Query, 20),
            Rule::LenMax("arn", Src::Query, 2048),
        ],
        (Api::OpenSearch, "ListVersions") => &[Rule::RangeMax("maxResults", Src::Query, 100)],
        (Api::OpenSearch, "ListVpcEndpointAccess") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
        ],
        (Api::OpenSearch, "ListVpcEndpointsForDomain") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
        ],
        (Api::OpenSearch, "PurchaseReservedInstanceOffering") => &[
            Rule::Required("ReservedInstanceOfferingId", Src::Body),
            Rule::LenMax("ReservedInstanceOfferingId", Src::Body, 36),
            Rule::Required("ReservationName", Src::Body),
            Rule::LenMin("ReservationName", Src::Body, 5),
            Rule::LenMax("ReservationName", Src::Body, 64),
            Rule::RangeMin("InstanceCount", Src::Body, 1),
        ],
        (Api::OpenSearch, "PutDefaultApplicationSetting") => &[
            Rule::Required("applicationArn", Src::Body),
            Rule::LenMin("applicationArn", Src::Body, 20),
            Rule::LenMax("applicationArn", Src::Body, 2048),
            Rule::Required("setAsDefault", Src::Body),
        ],
        (Api::OpenSearch, "RegisterCapability") => &[
            Rule::Required("capabilityName", Src::Body),
            Rule::LenMin("capabilityName", Src::Body, 3),
            Rule::LenMax("capabilityName", Src::Body, 30),
            Rule::Required("capabilityConfig", Src::Body),
        ],
        (Api::OpenSearch, "RejectInboundConnection") => &[
            Rule::LenMin("ConnectionId", Src::Label, 10),
            Rule::LenMax("ConnectionId", Src::Label, 256),
        ],
        (Api::OpenSearch, "RemoveTags") => &[
            Rule::Required("ARN", Src::Body),
            Rule::LenMin("ARN", Src::Body, 20),
            Rule::LenMax("ARN", Src::Body, 2048),
            Rule::Required("TagKeys", Src::Body),
        ],
        (Api::OpenSearch, "RevokeVpcEndpointAccess") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
            Rule::Enum(
                "Service",
                Src::Body,
                &["application.opensearchservice.amazonaws.com"],
            ),
        ],
        (Api::OpenSearch, "RollbackServiceSoftwareUpdate") => &[
            Rule::Required("DomainName", Src::Body),
            Rule::LenMin("DomainName", Src::Body, 3),
            Rule::LenMax("DomainName", Src::Body, 28),
        ],
        (Api::OpenSearch, "StartDomainMaintenance") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
            Rule::Required("Action", Src::Body),
            Rule::Enum(
                "Action",
                Src::Body,
                &["REBOOT_NODE", "RESTART_SEARCH_PROCESS", "RESTART_DASHBOARD"],
            ),
            Rule::LenMin("NodeId", Src::Body, 10),
            Rule::LenMax("NodeId", Src::Body, 40),
        ],
        (Api::OpenSearch, "StartServiceSoftwareUpdate") => &[
            Rule::Required("DomainName", Src::Body),
            Rule::LenMin("DomainName", Src::Body, 3),
            Rule::LenMax("DomainName", Src::Body, 28),
            Rule::Enum(
                "ScheduleAt",
                Src::Body,
                &["NOW", "TIMESTAMP", "OFF_PEAK_WINDOW"],
            ),
        ],
        (Api::OpenSearch, "UpdateDataSource") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
            Rule::LenMin("Name", Src::Label, 3),
            Rule::LenMax("Name", Src::Label, 80),
            Rule::Required("DataSourceType", Src::Body),
            Rule::LenMin("Description", Src::Body, 0),
            Rule::LenMax("Description", Src::Body, 1000),
            Rule::Enum("Status", Src::Body, &["ACTIVE", "DISABLED"]),
        ],
        (Api::OpenSearch, "UpdateDirectQueryDataSource") => &[
            Rule::LenMin("DataSourceName", Src::Label, 3),
            Rule::LenMax("DataSourceName", Src::Label, 80),
            Rule::Required("DataSourceType", Src::Body),
            Rule::LenMin("Description", Src::Body, 0),
            Rule::LenMax("Description", Src::Body, 1000),
            Rule::LenMin("DataSourceAccessPolicy", Src::Body, 0),
        ],
        (Api::OpenSearch, "UpdateDomainConfig") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
            Rule::LenMin("AccessPolicies", Src::Body, 0),
            Rule::Enum("IPAddressType", Src::Body, &["ipv4", "dualstack"]),
            Rule::Enum("DryRunMode", Src::Body, &["Basic", "Verbose"]),
            Rule::Enum(
                "UseCase",
                Src::Body,
                &["SEARCH", "VECTOR", "OBSERVABILITY", "MIXED"],
            ),
            Rule::Enum("EngineMode", Src::Body, &["GENERAL", "OPTIMIZED"]),
        ],
        (Api::OpenSearch, "UpdateIndex") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
            Rule::LenMin("IndexName", Src::Label, 1),
            Rule::LenMax("IndexName", Src::Label, 255),
            Rule::Required("IndexSchema", Src::Body),
        ],
        (Api::OpenSearch, "UpdatePackage") => &[
            Rule::Required("PackageID", Src::Body),
            Rule::Required("PackageSource", Src::Body),
            Rule::LenMin("PackageDescription", Src::Body, 0),
            Rule::LenMax("PackageDescription", Src::Body, 1024),
            Rule::LenMin("CommitMessage", Src::Body, 0),
            Rule::LenMax("CommitMessage", Src::Body, 160),
        ],
        (Api::OpenSearch, "UpdatePackageScope") => &[
            Rule::Required("PackageID", Src::Body),
            Rule::Required("Operation", Src::Body),
            Rule::Enum("Operation", Src::Body, &["ADD", "OVERRIDE", "REMOVE"]),
            Rule::Required("PackageUserList", Src::Body),
        ],
        (Api::OpenSearch, "UpdateScheduledAction") => &[
            Rule::LenMin("DomainName", Src::Label, 3),
            Rule::LenMax("DomainName", Src::Label, 28),
            Rule::Required("ActionID", Src::Body),
            Rule::Required("ActionType", Src::Body),
            Rule::Enum(
                "ActionType",
                Src::Body,
                &[
                    "SERVICE_SOFTWARE_UPDATE",
                    "JVM_HEAP_SIZE_TUNING",
                    "JVM_YOUNG_GEN_TUNING",
                ],
            ),
            Rule::Required("ScheduleAt", Src::Body),
            Rule::Enum(
                "ScheduleAt",
                Src::Body,
                &["NOW", "TIMESTAMP", "OFF_PEAK_WINDOW"],
            ),
        ],
        (Api::OpenSearch, "UpdateVpcEndpoint") => &[
            Rule::Required("VpcEndpointId", Src::Body),
            Rule::LenMin("VpcEndpointId", Src::Body, 5),
            Rule::LenMax("VpcEndpointId", Src::Body, 256),
            Rule::Required("VpcOptions", Src::Body),
        ],
        (Api::OpenSearch, "UpgradeDomain") => &[
            Rule::Required("DomainName", Src::Body),
            Rule::LenMin("DomainName", Src::Body, 3),
            Rule::LenMax("DomainName", Src::Body, 28),
            Rule::Required("TargetVersion", Src::Body),
            Rule::LenMin("TargetVersion", Src::Body, 14),
            Rule::LenMax("TargetVersion", Src::Body, 18),
        ],
        _ => &[],
    }
}
