diff --git a/benchmarks/serde-benchmarks/build.gradle.kts b/benchmarks/serde-benchmarks/build.gradle.kts index f9aed0487..3415285ec 100644 --- a/benchmarks/serde-benchmarks/build.gradle.kts +++ b/benchmarks/serde-benchmarks/build.gradle.kts @@ -1,7 +1,7 @@ plugins { id("smithy-java.java-conventions") - alias(libs.plugins.jmh) alias(libs.plugins.shadow) + alias(libs.plugins.jmh) id("software.amazon.smithy.gradle.smithy-base") } @@ -24,20 +24,15 @@ tasks.withType().configureEach { } dependencies { - // Smithy traits needed at build time (smithy-build) AND at runtime (when - // BenchmarkContext loads the model). + // Smithy traits needed at build time (smithy-build) and at runtime (when + // BenchmarkTestCases loads the model). The jmh configuration extends + // implementation, so these are available to both. implementation(libs.smithy.model) implementation(libs.smithy.aws.traits) implementation(libs.smithy.protocol.traits) implementation(libs.smithy.protocol.test.traits) implementation(libs.smithy.utils) - jmh(libs.smithy.model) - jmh(libs.smithy.aws.traits) - jmh(libs.smithy.protocol.traits) - jmh(libs.smithy.protocol.test.traits) - jmh(libs.smithy.utils) - // The Smithy Java codegen plugin produces typed shape classes plus // ApiOperation classes per service (see `smithy-build.json`). The // client-core dep is required because the generated client classes @@ -64,6 +59,9 @@ dependencies { jmh(project(":aws:client:aws-client-awsquery")) jmh(project(":aws:client:aws-client-restjson")) jmh(project(":aws:client:aws-client-restxml")) + + // Protocol test document for converting test case params into typed shapes. + jmh(project(":protocol-test-harness")) } // Smithy benchmark model files (tagged @httpRequestTests / @httpResponseTests @@ -73,11 +71,11 @@ dependencies { // `Model.assembler().discoverModels()`, which walks `META-INF/smithy/manifest` // resources on the classpath. abstract class GenerateSmithyManifest : DefaultTask() { - @get:org.gradle.api.tasks.InputDirectory - abstract val sourceDir: org.gradle.api.file.DirectoryProperty + @get:InputDirectory + abstract val sourceDir: DirectoryProperty - @get:org.gradle.api.tasks.OutputDirectory - abstract val outputDir: org.gradle.api.file.DirectoryProperty + @get:OutputDirectory + abstract val outputDir: DirectoryProperty @org.gradle.api.tasks.TaskAction fun run() { @@ -152,47 +150,66 @@ tasks.named("compileJmhJava") { dependsOn("smithyBuild") } +// All JMH parameters are configured here (single source of truth). +// Per-class annotations (@Warmup, @Measurement, @Fork, etc.) are not used. +// +// Fast mode: -Pjmh.fast (1 warmup, 3 measurement, 1 fork, 5s each) +// Profilers: -Pjmh.profilers=gc,stack (comma-separated JMH profiler names) +// Filter: -Pjmh.includes=RpcV2CborSerializeBenchmark.serialize +// Test case: -Pjmh.testCaseId=rpcv2Cbor_PutItemRequest_BinaryData_S +val fast = providers.gradleProperty("jmh.fast").isPresent jmh { - // Per-benchmark @Warmup / @Measurement / @Fork annotations on each class - // are authoritative. These extension defaults apply only when annotations - // are absent. - warmupIterations = 5 - iterations = 10 + benchmarkMode.addAll("sample") + timeUnit = "ns" + warmupIterations = if (fast) 1 else 5 + warmup = if (fast) "5s" else "2s" + iterations = if (fast) 3 else 10 + timeOnIteration = if (fast) "5s" else "5s" fork = 1 - // Select the native smithy-java JSON provider (rather than the default - // Jackson-backed provider, which has higher ServiceLoader priority). - // The system property is read once during static initialization of - // `JsonSettings`, so it must be set before the codec class loads. - jvmArgs.addAll("-Dsmithy-java.json-provider=smithy") + jvmArgs.addAll( + "-Xms1g", + "-Xmx1g", + "-XX:+UseG1GC", + "-XX:+AlwaysPreTouch", + "-Dsmithy-java.json-provider=smithy", + ) includes.addAll( providers .gradleProperty("jmh.includes") .map { listOf(it) } .orElse(emptyList()), ) - // Emit JSON output so it can be picked up by the `convertJmhResults` task. + profilers.addAll( + providers + .gradleProperty("jmh.profilers") + .map { it.split(",") } + .orElse(emptyList()), + ) + providers.gradleProperty("jmh.testCaseId").orNull?.let { id -> + val prop = objects.listProperty(String::class.java) + prop.add(id) + benchmarkParameters.put("testCaseId", prop) + } resultFormat = "json" resultsFile = layout.buildDirectory.file("results/jmh/results.json") } -// The me.champeau.jmh plugin auto-integrates with com.gradleup.shadow when -// both plugins are present: the `jmh` task uses a shadow-style classpath so -// duplicate META-INF/services/ entries (one per upstream module) are merged -// rather than overwritten. Without this, multiple TraitService SPI files -// collide and only one wins. -tasks.named("shadowJar") { +// With shadow applied before jmh, jmhJar is a ShadowJar. Configure +// mergeServiceFiles() so duplicate META-INF/services/ entries from +// multiple codegen projections are concatenated rather than overwritten. +tasks.jmhJar { mergeServiceFiles() + append("META-INF/smithy/manifest") } // Run the cross-language result converter. Reads the JMH JSON written by the // `jmh` task and writes a JSON + Markdown pair conforming to the shared -// benchmark output schema. +// benchmark output schema. OS, instance type (via EC2 IMDS), and smithy-java +// version are detected at runtime. // // ./gradlew :benchmarks:serde-benchmarks:convertJmhResults // // Optional properties: -// -Pinstance=m7i.xlarge instance label written to metadata.instance -// -Pos="" OS label written to metadata.os // -PoutputPrefix= prefix for the output files (default: build/results/jmh/output) tasks.register("convertJmhResults") { group = "benchmarks" @@ -204,9 +221,6 @@ tasks.register("convertJmhResults") { val inputFile = layout.buildDirectory.file("results/jmh/results.json") val defaultPrefix = layout.buildDirectory.file("results/jmh/output").map { it.asFile.absolutePath } val outputPrefix = providers.gradleProperty("outputPrefix").orElse(defaultPrefix) - val instance = providers.gradleProperty("instance").orElse("unknown") - val os = providers.gradleProperty("os").orElse(System.getProperty("os.name") + " " + System.getProperty("os.version")) - val smithyJavaVersion = project.file("${project.rootDir}/VERSION").readText().trim() inputs.file(inputFile) outputs.files( @@ -219,11 +233,9 @@ tasks.register("convertJmhResults") { inputFile.get().asFile.absolutePath, "--output-prefix", outputPrefix.get(), - "--instance", - instance.get(), - "--os", - os.get(), - "--software-version", - smithyJavaVersion, ) } + +tasks.named("jmh") { + finalizedBy("convertJmhResults") +} diff --git a/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/ApiOperationLookup.java b/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/ApiOperationLookup.java deleted file mode 100644 index f989151a1..000000000 --- a/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/ApiOperationLookup.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -package software.amazon.smithy.java.benchmarks.serde; - -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import software.amazon.smithy.java.core.schema.ApiOperation; -import software.amazon.smithy.java.core.schema.SerializableStruct; - -/** - * Resolves the codegen-generated {@link ApiOperation} singleton for a given - * operation name within a protocol-specific generated package. - * - *

The {@code java-codegen} plugin in {@code client} mode emits each - * operation as {@code .} with a public - * static {@code instance()} factory. - */ -final class ApiOperationLookup { - - private ApiOperationLookup() {} - - @SuppressWarnings("unchecked") - static ApiOperation resolve(String generatedPackage, String operationName) { - String fqcn = generatedPackage + "." + operationName; - try { - Class opClass = Class.forName(fqcn); - Method instanceMethod = opClass.getMethod("instance"); - return (ApiOperation) instanceMethod - .invoke(null); - } catch (ClassNotFoundException e) { - throw new IllegalStateException( - "No generated ApiOperation class found at " + fqcn - + ". Has codegen been re-run for this protocol?", - e); - } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { - throw new IllegalStateException( - "Failed to obtain instance of generated ApiOperation " + fqcn, - e); - } - } -} diff --git a/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/AwsJson1_0DeserializeBenchmark.java b/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/AwsJson1_0DeserializeBenchmark.java index 770b3cde7..b4b2b5240 100644 --- a/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/AwsJson1_0DeserializeBenchmark.java +++ b/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/AwsJson1_0DeserializeBenchmark.java @@ -6,18 +6,11 @@ package software.amazon.smithy.java.benchmarks.serde; import java.nio.charset.StandardCharsets; -import java.util.concurrent.TimeUnit; import org.openjdk.jmh.annotations.Benchmark; -import org.openjdk.jmh.annotations.BenchmarkMode; -import org.openjdk.jmh.annotations.Fork; -import org.openjdk.jmh.annotations.Measurement; -import org.openjdk.jmh.annotations.Mode; -import org.openjdk.jmh.annotations.OutputTimeUnit; import org.openjdk.jmh.annotations.Param; import org.openjdk.jmh.annotations.Scope; import org.openjdk.jmh.annotations.Setup; import org.openjdk.jmh.annotations.State; -import org.openjdk.jmh.annotations.Warmup; import org.openjdk.jmh.infra.Blackhole; import software.amazon.smithy.java.aws.client.awsjson.AwsJson1Protocol; import software.amazon.smithy.java.core.schema.ApiOperation; @@ -30,11 +23,6 @@ * response and produce a typed output. */ @State(Scope.Benchmark) -@BenchmarkMode(Mode.SampleTime) -@OutputTimeUnit(TimeUnit.NANOSECONDS) -@Warmup(iterations = 5, time = 2, timeUnit = TimeUnit.SECONDS) -@Measurement(iterations = 10, time = 5, timeUnit = TimeUnit.SECONDS) -@Fork(1) public class AwsJson1_0DeserializeBenchmark { private static final String GENERATED_PACKAGE = diff --git a/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/AwsJson1_0SerializeBenchmark.java b/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/AwsJson1_0SerializeBenchmark.java index 03eeae820..00f96bb87 100644 --- a/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/AwsJson1_0SerializeBenchmark.java +++ b/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/AwsJson1_0SerializeBenchmark.java @@ -5,18 +5,11 @@ package software.amazon.smithy.java.benchmarks.serde; -import java.util.concurrent.TimeUnit; import org.openjdk.jmh.annotations.Benchmark; -import org.openjdk.jmh.annotations.BenchmarkMode; -import org.openjdk.jmh.annotations.Fork; -import org.openjdk.jmh.annotations.Measurement; -import org.openjdk.jmh.annotations.Mode; -import org.openjdk.jmh.annotations.OutputTimeUnit; import org.openjdk.jmh.annotations.Param; import org.openjdk.jmh.annotations.Scope; import org.openjdk.jmh.annotations.Setup; import org.openjdk.jmh.annotations.State; -import org.openjdk.jmh.annotations.Warmup; import org.openjdk.jmh.infra.Blackhole; import software.amazon.smithy.java.aws.client.awsjson.AwsJson1Protocol; import software.amazon.smithy.java.core.schema.ApiOperation; @@ -31,11 +24,6 @@ * generated client uses internally. */ @State(Scope.Benchmark) -@BenchmarkMode(Mode.SampleTime) -@OutputTimeUnit(TimeUnit.NANOSECONDS) -@Warmup(iterations = 5, time = 2, timeUnit = TimeUnit.SECONDS) -@Measurement(iterations = 10, time = 5, timeUnit = TimeUnit.SECONDS) -@Fork(1) public class AwsJson1_0SerializeBenchmark { private static final String GENERATED_PACKAGE = diff --git a/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/AwsQueryDeserializeBenchmark.java b/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/AwsQueryDeserializeBenchmark.java index e48ca15d7..bf05d94f6 100644 --- a/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/AwsQueryDeserializeBenchmark.java +++ b/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/AwsQueryDeserializeBenchmark.java @@ -5,18 +5,11 @@ package software.amazon.smithy.java.benchmarks.serde; -import java.util.concurrent.TimeUnit; import org.openjdk.jmh.annotations.Benchmark; -import org.openjdk.jmh.annotations.BenchmarkMode; -import org.openjdk.jmh.annotations.Fork; -import org.openjdk.jmh.annotations.Measurement; -import org.openjdk.jmh.annotations.Mode; -import org.openjdk.jmh.annotations.OutputTimeUnit; import org.openjdk.jmh.annotations.Param; import org.openjdk.jmh.annotations.Scope; import org.openjdk.jmh.annotations.Setup; import org.openjdk.jmh.annotations.State; -import org.openjdk.jmh.annotations.Warmup; import org.openjdk.jmh.infra.Blackhole; import software.amazon.smithy.java.aws.client.awsquery.AwsQueryClientProtocol; import software.amazon.smithy.java.core.schema.ApiOperation; @@ -29,11 +22,6 @@ * protocol-specific result wrapper element. */ @State(Scope.Benchmark) -@BenchmarkMode(Mode.SampleTime) -@OutputTimeUnit(TimeUnit.NANOSECONDS) -@Warmup(iterations = 5, time = 2, timeUnit = TimeUnit.SECONDS) -@Measurement(iterations = 10, time = 5, timeUnit = TimeUnit.SECONDS) -@Fork(1) public class AwsQueryDeserializeBenchmark { private static final String GENERATED_PACKAGE = diff --git a/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/AwsQuerySerializeBenchmark.java b/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/AwsQuerySerializeBenchmark.java index fe216c266..77960230b 100644 --- a/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/AwsQuerySerializeBenchmark.java +++ b/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/AwsQuerySerializeBenchmark.java @@ -5,18 +5,11 @@ package software.amazon.smithy.java.benchmarks.serde; -import java.util.concurrent.TimeUnit; import org.openjdk.jmh.annotations.Benchmark; -import org.openjdk.jmh.annotations.BenchmarkMode; -import org.openjdk.jmh.annotations.Fork; -import org.openjdk.jmh.annotations.Measurement; -import org.openjdk.jmh.annotations.Mode; -import org.openjdk.jmh.annotations.OutputTimeUnit; import org.openjdk.jmh.annotations.Param; import org.openjdk.jmh.annotations.Scope; import org.openjdk.jmh.annotations.Setup; import org.openjdk.jmh.annotations.State; -import org.openjdk.jmh.annotations.Warmup; import org.openjdk.jmh.infra.Blackhole; import software.amazon.smithy.java.aws.client.awsquery.AwsQueryClientProtocol; import software.amazon.smithy.java.core.schema.ApiOperation; @@ -29,11 +22,6 @@ * {@link AwsQueryClientProtocol#createRequest}. */ @State(Scope.Benchmark) -@BenchmarkMode(Mode.SampleTime) -@OutputTimeUnit(TimeUnit.NANOSECONDS) -@Warmup(iterations = 5, time = 2, timeUnit = TimeUnit.SECONDS) -@Measurement(iterations = 10, time = 5, timeUnit = TimeUnit.SECONDS) -@Fork(1) public class AwsQuerySerializeBenchmark { private static final String GENERATED_PACKAGE = diff --git a/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/BenchmarkContext.java b/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/BenchmarkContext.java deleted file mode 100644 index fb4fe7261..000000000 --- a/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/BenchmarkContext.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -package software.amazon.smithy.java.benchmarks.serde; - -import java.util.HashMap; -import java.util.Map; -import software.amazon.smithy.model.Model; -import software.amazon.smithy.model.shapes.OperationShape; - -/** - * Loads the Smithy benchmark model from the classpath and exposes the runtime - * objects needed by the JMH benchmark classes. - * - *

The model files are bundled as resources (see {@code build.gradle.kts}'s - * {@code generateSmithyManifest} task) and discovered via - * {@link Model#assembler()}'s default discovery mechanism. - * - *

Each benchmark is parameterized by a test case ID, which is the {@code id} - * field of an entry in an operation's {@code @httpRequestTests} or - * {@code @httpResponseTests} trait that is tagged {@code "serde-benchmark"}. - * See {@link BenchmarkTestCases} for the test-case loading logic. - */ -final class BenchmarkContext { - - /** Smithy model loaded once per JVM. */ - static final Model MODEL = loadModel(); - - /** Indexed by operation simple name, e.g. {@code "GetItem"} -> {@code OperationShape}. */ - private static final Map OPERATIONS = indexOperations(MODEL); - - private BenchmarkContext() {} - - /** - * Find the operation shape with the given simple name. Operation names are - * unique across this benchmark model. - */ - static OperationShape operation(String simpleName) { - OperationShape shape = OPERATIONS.get(simpleName); - if (shape == null) { - throw new IllegalArgumentException("Unknown operation: " + simpleName); - } - return shape; - } - - private static Model loadModel() { - return Model.assembler(BenchmarkContext.class.getClassLoader()) - .discoverModels(BenchmarkContext.class.getClassLoader()) - .assemble() - .unwrap(); - } - - private static Map indexOperations(Model model) { - Map ops = new HashMap<>(); - for (OperationShape op : model.getOperationShapes()) { - ops.put(op.getId().getName(), op); - } - return ops; - } -} diff --git a/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/BenchmarkTestCases.java b/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/BenchmarkTestCases.java index 47580cbe3..e10e4d2e9 100644 --- a/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/BenchmarkTestCases.java +++ b/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/BenchmarkTestCases.java @@ -7,7 +7,6 @@ import java.util.LinkedHashMap; import java.util.Map; -import java.util.Optional; import software.amazon.smithy.model.Model; import software.amazon.smithy.model.shapes.OperationShape; import software.amazon.smithy.protocoltests.traits.HttpMessageTestCase; @@ -27,13 +26,14 @@ */ final class BenchmarkTestCases { - /** The tag that marks a test case as a serde benchmark. */ static final String TAG = "serde-benchmark"; - /** Lazily-built map: test-case id -> request entry. */ - private static final Map REQUESTS = indexRequests(); + private static final Model MODEL = Model.assembler(BenchmarkTestCases.class.getClassLoader()) + .discoverModels(BenchmarkTestCases.class.getClassLoader()) + .assemble() + .unwrap(); - /** Lazily-built map: test-case id -> response entry. */ + private static final Map REQUESTS = indexRequests(); private static final Map RESPONSES = indexResponses(); private BenchmarkTestCases() {} @@ -58,17 +58,15 @@ static ResponseEntry response(String testCaseId) { private static Map indexRequests() { Map result = new LinkedHashMap<>(); - Model model = BenchmarkContext.MODEL; - for (OperationShape op : model.getOperationShapes()) { - Optional trait = op.getTrait(HttpRequestTestsTrait.class); + for (OperationShape op : MODEL.getOperationShapes()) { + var trait = op.getTrait(HttpRequestTestsTrait.class); if (trait.isEmpty()) { continue; } for (HttpRequestTestCase tc : trait.get().getTestCases()) { - if (!hasBenchmarkTag(tc)) { - continue; + if (hasBenchmarkTag(tc)) { + result.put(tc.getId(), new RequestEntry(op, tc)); } - result.put(tc.getId(), new RequestEntry(op, tc)); } } return result; @@ -76,17 +74,15 @@ private static Map indexRequests() { private static Map indexResponses() { Map result = new LinkedHashMap<>(); - Model model = BenchmarkContext.MODEL; - for (OperationShape op : model.getOperationShapes()) { - Optional trait = op.getTrait(HttpResponseTestsTrait.class); + for (OperationShape op : MODEL.getOperationShapes()) { + var trait = op.getTrait(HttpResponseTestsTrait.class); if (trait.isEmpty()) { continue; } for (HttpResponseTestCase tc : trait.get().getTestCases()) { - if (!hasBenchmarkTag(tc)) { - continue; + if (hasBenchmarkTag(tc)) { + result.put(tc.getId(), new ResponseEntry(op, tc)); } - result.put(tc.getId(), new ResponseEntry(op, tc)); } } return result; @@ -96,25 +92,7 @@ private static boolean hasBenchmarkTag(HttpMessageTestCase tc) { return tc.getTags().contains(TAG); } - /** Pairing of an operation with one of its benchmark request test cases. */ - static final class RequestEntry { - final OperationShape operation; - final HttpRequestTestCase testCase; - - RequestEntry(OperationShape operation, HttpRequestTestCase testCase) { - this.operation = operation; - this.testCase = testCase; - } - } - - /** Pairing of an operation with one of its benchmark response test cases. */ - static final class ResponseEntry { - final OperationShape operation; - final HttpResponseTestCase testCase; + record RequestEntry(OperationShape operation, HttpRequestTestCase testCase) {} - ResponseEntry(OperationShape operation, HttpResponseTestCase testCase) { - this.operation = operation; - this.testCase = testCase; - } - } + record ResponseEntry(OperationShape operation, HttpResponseTestCase testCase) {} } diff --git a/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/DeserializeState.java b/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/DeserializeState.java index 6da5b8a06..42ffe3ce2 100644 --- a/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/DeserializeState.java +++ b/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/DeserializeState.java @@ -89,10 +89,10 @@ static DeserializeState forTestCase( boolean base64DecodeBody ) { ResponseEntry entry = BenchmarkTestCases.response(testCaseId); - OperationShape opShape = entry.operation; + OperationShape opShape = entry.operation(); ApiOperation operation = - ApiOperationLookup.resolve(generatedPackage, opShape.getId().getName()); + SerializeState.resolveOperation(generatedPackage, opShape.getId().getName()); byte[] resolvedEmpty = emptyBody; if (resolvedEmpty == null) { @@ -106,12 +106,13 @@ static DeserializeState forTestCase( String rootName = xmlName != null ? xmlName.getValue() : schema.id().getName(); resolvedEmpty = ("<" + rootName + "/>").getBytes(StandardCharsets.UTF_8); } - byte[] body = entry.testCase.getBody() + byte[] body = entry.testCase() + .getBody() .map(s -> base64DecodeBody ? Base64.getMimeDecoder().decode(s) : s.getBytes(StandardCharsets.UTF_8)) .orElse(resolvedEmpty); - int statusCode = entry.testCase.getCode(); + int statusCode = entry.testCase().getCode(); ModifiableHttpResponse response = HttpResponse.create() .setStatusCode(statusCode) @@ -119,7 +120,7 @@ static DeserializeState forTestCase( // Merge the trait's response.headers (if any) so the binding // deserializer's @httpHeader extraction sees realistic headers. - Map traitHeaders = entry.testCase.getHeaders(); + Map traitHeaders = entry.testCase().getHeaders(); if (traitHeaders != null) { for (Map.Entry e : traitHeaders.entrySet()) { response.setHeader(e.getKey(), e.getValue()); diff --git a/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/JmhResultConverter.java b/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/JmhResultConverter.java index f286f1e94..23fb02cae 100644 --- a/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/JmhResultConverter.java +++ b/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/JmhResultConverter.java @@ -5,15 +5,24 @@ package software.amazon.smithy.java.benchmarks.serde; -import java.io.File; import java.io.IOException; import java.io.PrintWriter; +import java.lang.management.ManagementFactory; +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; import java.nio.charset.StandardCharsets; import java.nio.file.Files; +import java.nio.file.Path; import java.text.NumberFormat; +import java.time.Duration; import java.util.ArrayList; +import java.util.LinkedHashSet; import java.util.List; import java.util.Locale; +import java.util.stream.Collectors; +import software.amazon.smithy.java.core.Version; import software.amazon.smithy.model.node.ArrayNode; import software.amazon.smithy.model.node.Node; import software.amazon.smithy.model.node.NumberNode; @@ -32,8 +41,12 @@ * "lang": "Java", * "software": [["smithy-java", ""]], * "os": "", - * "instance": "", - * "precision": "-9" + * "instance": "", + * "precision": "-9", + * "jvm": { + * "id": " ", + * "args": "" + * } * }, * "serde_benchmarks": [ * { @@ -50,133 +63,158 @@ * } * } * + *

The {@code instance} field is auto-detected: on EC2 it queries IMDSv2 + * for the instance type (e.g. {@code "m7i.xlarge"}); on macOS it reports the + * chip name via {@code sysctl}; otherwise it reports cores and RAM. + * *

Two files are produced: {@code .json} and {@code * .md} (a rendered markdown table). * - *

CLI usage: - * - *

- *   --input <jmh-results.json>  (required) JMH JSON output file
- *   --output-prefix <path>      (required) prefix for output .json and .md files
- *   --instance <label>          (optional) e.g. "m7i.xlarge"; default "unknown"
- *   --os <label>                (optional) free-form OS descriptor
- *   --software-version <ver>    (optional) override the smithy-java version label
- * 
+ *

Called from the Gradle build's {@code jmh} task via {@code doLast}. */ public final class JmhResultConverter { private JmhResultConverter() {} - public static void main(String[] args) throws IOException { - Args parsed = Args.parse(args); - convert(parsed); - } + static void main(String[] args) throws IOException { + String input = null, outputPrefix = null; - static void convert(Args args) throws IOException { - Node root = Node.parse(Files.readString(new File(args.input).toPath(), StandardCharsets.UTF_8)); - ObjectNode output = buildOutput(root, args); + for (int i = 0; i < args.length; i++) { + switch (args[i]) { + case "--input" -> input = args[++i]; + case "--output-prefix" -> outputPrefix = args[++i]; + default -> throw new IllegalArgumentException("Unknown argument: " + args[i]); + } + } + if (input == null || outputPrefix == null) { + throw new IllegalArgumentException("Required: --input --output-prefix "); + } - File outJson = new File(args.outputPrefix + ".json"); - File outMd = new File(args.outputPrefix + ".md"); + convert(Path.of(input), Path.of(outputPrefix)); + } - File parent = outJson.getAbsoluteFile().getParentFile(); - if (parent != null) { - parent.mkdirs(); - } + public static void convert(Path jmhResultsPath, Path outputPrefix) throws IOException { + String os = System.getProperty("os.name") + " " + System.getProperty("os.version"); + String instance = detectMachineInfo(); + String softwareVersion = Version.VERSION; + Node root = Node.parse(Files.readString(jmhResultsPath, StandardCharsets.UTF_8)); + ObjectNode output = buildOutput(root, instance, os, softwareVersion); - Files.writeString(outJson.toPath(), Node.prettyPrintJson(output), StandardCharsets.UTF_8); - writeMarkdown(output, outMd); + Path outJson = Path.of(outputPrefix + ".json"); + Path outMd = Path.of(outputPrefix + ".md"); + Files.createDirectories(outJson.getParent()); - System.out.println("Wrote " + outJson.getAbsolutePath()); - System.out.println("Wrote " + outMd.getAbsolutePath()); + Files.writeString(outJson, Node.prettyPrintJson(output), StandardCharsets.UTF_8); + writeMarkdown(output, outMd); } - static ObjectNode buildOutput(Node jmhResults, Args args) { + private static ObjectNode buildOutput(Node jmhResults, String instance, String os, String softwareVersion) { + var metadata = Node.objectNodeBuilder() + .withMember("lang", "Java") + .withMember("software", ArrayNode.fromNodes(ArrayNode.fromStrings("smithy-java", softwareVersion))) + .withMember("os", os) + .withMember("instance", instance) + .withMember("precision", "-9") + .withMember("jvm", buildJvmInfo(jmhResults)) + .build(); + return Node.objectNodeBuilder() - .withMember("metadata", buildMetadata(args)) + .withMember("metadata", metadata) .withMember("serde_benchmarks", buildEntries(jmhResults)) .build(); } - private static ObjectNode buildMetadata(Args args) { - ArrayNode software = ArrayNode.fromNodes( - ArrayNode.fromStrings("smithy-java", args.softwareVersion)); + private static ObjectNode buildJvmInfo(Node jmhResults) { + // Extract JVM details from the first JMH result entry rather than + // the converter's own process, so values are correct when the + // converter runs on a different JVM than the benchmarks. + var firstResult = firstJmhResult(jmhResults); + + String vmName = firstResult.getStringMemberOrDefault("vmName", "unknown"); + String vmVersion = firstResult.getStringMemberOrDefault("vmVersion", "unknown"); + String id = vmName + " " + vmVersion; + + List jvmArgsList = firstResult.getArrayMember("jvmArgs") + .map(arr -> arr.getElements() + .stream() + .filter(Node::isStringNode) + .map(n -> n.expectStringNode().getValue()) + .toList()) + .orElse(List.of()); + + String args = jvmArgsList.stream() + .filter(s -> !s.startsWith("-D")) + .collect(Collectors.joining(" ")); + return Node.objectNodeBuilder() - .withMember("lang", "Java") - .withMember("software", software) - .withMember("os", args.os) - .withMember("instance", args.instance) - .withMember("precision", "-9") + .withMember("id", id) + .withMember("args", args) .build(); } + private static ObjectNode firstJmhResult(Node jmhResults) { + if (jmhResults != null && jmhResults.isArrayNode()) { + var elements = jmhResults.expectArrayNode().getElements(); + if (!elements.isEmpty() && elements.getFirst().isObjectNode()) { + return elements.getFirst().expectObjectNode(); + } + } + return Node.objectNode(); + } + private static ArrayNode buildEntries(Node jmhResults) { if (jmhResults == null || !jmhResults.isArrayNode()) { return Node.arrayNode(); } - // Dedupe on test case id — keep the first observation. JMH does not - // produce duplicates in normal operation, but multiple `jmh` task runs - // appended into the same file would. + var seen = new LinkedHashSet(); List entries = new ArrayList<>(); - java.util.Set seen = new java.util.HashSet<>(); for (Node element : jmhResults.expectArrayNode().getElements()) { - if (!element.isObjectNode()) + if (!element.isObjectNode()) { continue; - ObjectNode result = element.expectObjectNode(); - String id = extractTestCaseId(result); + } + var result = element.expectObjectNode(); + String id = result.getObjectMember("params") + .flatMap(p -> p.getStringMember("testCaseId")) + .map(s -> s.getValue()) + .orElse(null); if (id == null || !seen.add(id)) { continue; } - ObjectNode entry = convertSingleResult(result, id); - if (entry != null) { - entries.add(entry); - } + + var primary = result.getObjectMember("primaryMetric").orElse(Node.objectNode()); + var percentiles = primary.getObjectMember("scorePercentiles").orElse(Node.objectNode()); + + entries.add(Node.objectNodeBuilder() + .withMember("id", id) + .withMember("n", countSamples(primary.getMember("rawDataHistogram").orElse(null))) + .withMember("mean", doubleOf(primary, "score")) + .withMember("p50", doubleOf(percentiles, "50.0")) + .withMember("p90", doubleOf(percentiles, "90.0")) + .withMember("p95", doubleOf(percentiles, "95.0")) + .withMember("p99", doubleOf(percentiles, "99.0")) + .withMember("std_dev", doubleOf(primary, "scoreError")) + .build()); } return ArrayNode.fromNodes(entries.toArray(new ObjectNode[0])); } - private static ObjectNode convertSingleResult(ObjectNode result, String id) { - ObjectNode primary = result.getObjectMember("primaryMetric").orElse(Node.objectNode()); - double mean = primary.getNumberMember("score").map(NumberNode::getValue).map(Number::doubleValue).orElse(0.0); - double stdDev = - primary.getNumberMember("scoreError").map(NumberNode::getValue).map(Number::doubleValue).orElse(0.0); - - ObjectNode percentiles = primary.getObjectMember("scorePercentiles").orElse(Node.objectNode()); - double p50 = percentiles.getNumberMember("50.0").map(NumberNode::getValue).map(Number::doubleValue).orElse(0.0); - double p90 = percentiles.getNumberMember("90.0").map(NumberNode::getValue).map(Number::doubleValue).orElse(0.0); - double p95 = percentiles.getNumberMember("95.0").map(NumberNode::getValue).map(Number::doubleValue).orElse(0.0); - double p99 = percentiles.getNumberMember("99.0").map(NumberNode::getValue).map(Number::doubleValue).orElse(0.0); - - long n = computeTotalInvocations(primary.getMember("rawDataHistogram").orElse(null)); - - return Node.objectNodeBuilder() - .withMember("id", id) - .withMember("n", n) - .withMember("mean", mean) - .withMember("p50", p50) - .withMember("p90", p90) - .withMember("p95", p95) - .withMember("p99", p99) - .withMember("std_dev", stdDev) - .build(); + private static double doubleOf(ObjectNode node, String key) { + return node.getNumberMember(key).map(NumberNode::getValue).map(Number::doubleValue).orElse(0.0); } - /** - * Sum invocation counts from JMH's nested {@code [fork][iteration] = - * [[value, count], ...]} histogram. Returns 0 when the histogram is - * absent (which happens for non-SampleTime modes). - */ - private static long computeTotalInvocations(Node histogramNode) { + private static long countSamples(Node histogramNode) { if (histogramNode == null || !histogramNode.isArrayNode()) { return 0; } long total = 0; for (Node fork : histogramNode.expectArrayNode().getElements()) { - if (!fork.isArrayNode()) + if (!fork.isArrayNode()) { continue; + } for (Node iteration : fork.expectArrayNode().getElements()) { - if (!iteration.isArrayNode()) + if (!iteration.isArrayNode()) { continue; + } for (Node bin : iteration.expectArrayNode().getElements()) { if (bin.isArrayNode()) { var elems = bin.expectArrayNode().getElements(); @@ -190,134 +228,124 @@ private static long computeTotalInvocations(Node histogramNode) { return total; } - private static String extractTestCaseId(ObjectNode result) { - return result.getObjectMember("params") - .flatMap(p -> p.getStringMember("testCaseId")) - .map(s -> s.getValue()) - .orElse(null); - } - - private static void writeMarkdown(ObjectNode output, File file) throws IOException { - ObjectNode metadata = output.getObjectMember("metadata").orElse(Node.objectNode()); - ArrayNode entries = output.getArrayMember("serde_benchmarks").orElse(Node.arrayNode()); + private static void writeMarkdown(ObjectNode output, Path file) throws IOException { + var metadata = output.getObjectMember("metadata").orElse(Node.objectNode()); + var entries = output.getArrayMember("serde_benchmarks").orElse(Node.arrayNode()); NumberFormat nf = NumberFormat.getIntegerInstance(Locale.US); - try (PrintWriter pw = new PrintWriter(file, StandardCharsets.UTF_8)) { + try (var pw = new PrintWriter(Files.newBufferedWriter(file, StandardCharsets.UTF_8))) { pw.println("# " + metadata.getStringMemberOrDefault("lang", "Java")); pw.println(); - String os = metadata.getStringMemberOrDefault("os", ""); - String instance = metadata.getStringMemberOrDefault("instance", ""); - pw.println("## " + (os + " " + instance).trim()); + pw.println("## " + (metadata.getStringMemberOrDefault("os", "") + + " " + metadata.getStringMemberOrDefault("instance", "")).trim()); pw.println(); - ArrayNode software = metadata.getArrayMember("software").orElse(Node.arrayNode()); - if (!software.isEmpty()) { - pw.println("```"); - for (Node pair : software.getElements()) { - if (pair.isArrayNode()) { - var elems = pair.expectArrayNode().getElements(); - if (elems.size() >= 2) { - pw.println(elems.get(0).expectStringNode().getValue() - + " / " - + elems.get(1).expectStringNode().getValue()); - } + pw.println("```"); + var software = metadata.getArrayMember("software").orElse(Node.arrayNode()); + for (Node pair : software.getElements()) { + if (pair.isArrayNode()) { + var elems = pair.expectArrayNode().getElements(); + if (elems.size() >= 2) { + pw.println(elems.get(0).expectStringNode().getValue() + + " / " + elems.get(1).expectStringNode().getValue()); } } - pw.println("```"); } + var jvm = metadata.getObjectMember("jvm").orElse(Node.objectNode()); + pw.println("JVM: " + jvm.getStringMemberOrDefault("id", "")); + pw.println("Args: " + jvm.getStringMemberOrDefault("args", "")); + pw.println("```"); pw.println("|id|n|mean|p50|p90|p95|p99|std_dev|"); pw.println("|----:|----:|----:|----:|----:|----:|----:|----:|"); for (Node bm : entries.getElements()) { - if (!bm.isObjectNode()) + if (!bm.isObjectNode()) { continue; - ObjectNode entry = bm.expectObjectNode(); + } + var entry = bm.expectObjectNode(); pw.println("|" + entry.getStringMemberOrDefault("id", "") - + "|" - + nf.format( - entry.getNumberMember("n").map(NumberNode::getValue).map(Number::longValue).orElse(0L)) - + "|" - + nf.format(Math.round(entry.getNumberMember("mean") - .map(NumberNode::getValue) - .map(Number::doubleValue) - .orElse(0.0))) - + "|" - + nf.format(Math.round(entry.getNumberMember("p50") - .map(NumberNode::getValue) - .map(Number::doubleValue) - .orElse(0.0))) - + "|" - + nf.format(Math.round(entry.getNumberMember("p90") - .map(NumberNode::getValue) - .map(Number::doubleValue) - .orElse(0.0))) - + "|" - + nf.format(Math.round(entry.getNumberMember("p95") - .map(NumberNode::getValue) - .map(Number::doubleValue) - .orElse(0.0))) - + "|" - + nf.format(Math.round(entry.getNumberMember("p99") - .map(NumberNode::getValue) - .map(Number::doubleValue) - .orElse(0.0))) - + "|" - + nf.format(Math.round(entry.getNumberMember("std_dev") - .map(NumberNode::getValue) - .map(Number::doubleValue) - .orElse(0.0))) + + "|" + nf.format(longOf(entry, "n")) + + "|" + nf.format(Math.round(doubleOf(entry, "mean"))) + + "|" + nf.format(Math.round(doubleOf(entry, "p50"))) + + "|" + nf.format(Math.round(doubleOf(entry, "p90"))) + + "|" + nf.format(Math.round(doubleOf(entry, "p95"))) + + "|" + nf.format(Math.round(doubleOf(entry, "p99"))) + + "|" + nf.format(Math.round(doubleOf(entry, "std_dev"))) + "|"); } } } - /** Parsed CLI args. */ - static final class Args { - String input; - String outputPrefix; - String instance = "unknown"; - String os = System.getProperty("os.name") + " " + System.getProperty("os.version"); - String softwareVersion = readVersionResource(); - - static Args parse(String[] argv) { - Args a = new Args(); - for (int i = 0; i < argv.length; i++) { - switch (argv[i]) { - case "--input" -> a.input = require(argv, ++i, "--input"); - case "--output-prefix" -> a.outputPrefix = require(argv, ++i, "--output-prefix"); - case "--instance" -> a.instance = require(argv, ++i, "--instance"); - case "--os" -> a.os = require(argv, ++i, "--os"); - case "--software-version" -> a.softwareVersion = require(argv, ++i, "--software-version"); - default -> throw new IllegalArgumentException("Unknown argument: " + argv[i]); - } - } - if (a.input == null || a.outputPrefix == null) { - throw new IllegalArgumentException( - "Required arguments: --input --output-prefix "); - } - return a; + private static long longOf(ObjectNode node, String key) { + return node.getNumberMember(key).map(NumberNode::getValue).map(Number::longValue).orElse(0L); + } + + private static String detectMachineInfo() { + // Try EC2 IMDS first + String ec2Type = queryEc2InstanceType(); + if (ec2Type != null) { + return ec2Type; + } + + // Fall back to cores + RAM summary + int cores = Runtime.getRuntime().availableProcessors(); + long ramMb = ManagementFactory.getOperatingSystemMXBean() instanceof com.sun.management.OperatingSystemMXBean os + ? os.getTotalMemorySize() / (1024 * 1024) + : Runtime.getRuntime().maxMemory() / (1024 * 1024); + String ramLabel = ramMb >= 1024 ? (ramMb / 1024) + "GB" : ramMb + "MB"; + + // On macOS, try to get the chip name (e.g. "Apple M3 Max") + String chip = detectMacChip(); + if (chip != null) { + return chip + " (" + cores + " cores, " + ramLabel + " RAM)"; } - private static String require(String[] argv, int idx, String flag) { - if (idx >= argv.length) { - throw new IllegalArgumentException("Missing value for " + flag); + return cores + " cores, " + ramLabel + " RAM"; + } + + private static String queryEc2InstanceType() { + try (var client = HttpClient.newBuilder() + .connectTimeout(Duration.ofSeconds(1)) + .build()) { + var tokenRequest = HttpRequest.newBuilder() + .uri(URI.create("http://169.254.169.254/latest/api/token")) + .header("X-aws-ec2-metadata-token-ttl-seconds", "21600") + .PUT(HttpRequest.BodyPublishers.noBody()) + .timeout(Duration.ofSeconds(1)) + .build(); + var tokenResponse = client.send(tokenRequest, HttpResponse.BodyHandlers.ofString()); + String token = tokenResponse.body().trim(); + + var metadataRequest = HttpRequest.newBuilder() + .uri(URI.create("http://169.254.169.254/latest/meta-data/instance-type")) + .header("X-aws-ec2-metadata-token", token) + .timeout(Duration.ofSeconds(1)) + .build(); + var metadataResponse = client.send(metadataRequest, HttpResponse.BodyHandlers.ofString()); + if (metadataResponse.statusCode() == 200) { + return metadataResponse.body().trim(); } - return argv[idx]; + } catch (Exception _) { + // Not on EC2 or IMDS unavailable } + return null; + } - /** - * Read the smithy-java version from the {@code VERSION} resource if it - * is on the classpath; otherwise return {@code "unknown"}. - */ - private static String readVersionResource() { - try (var in = JmhResultConverter.class.getResourceAsStream("/VERSION")) { - if (in == null) { - return "unknown"; - } - return new String(in.readAllBytes(), StandardCharsets.UTF_8).trim(); - } catch (IOException e) { - return "unknown"; + private static String detectMacChip() { + if (!System.getProperty("os.name", "").toLowerCase(Locale.ROOT).contains("mac")) { + return null; + } + try { + var proc = new ProcessBuilder("sysctl", "-n", "machdep.cpu.brand_string") + .redirectErrorStream(true) + .start(); + String output = new String(proc.getInputStream().readAllBytes(), StandardCharsets.UTF_8).trim(); + if (proc.waitFor() == 0 && !output.isEmpty()) { + return output; } + } catch (Exception _) { + // sysctl not available } + return null; } } diff --git a/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/RestJson1DeserializeBenchmark.java b/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/RestJson1DeserializeBenchmark.java index ebfbe2dbc..e351e93a7 100644 --- a/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/RestJson1DeserializeBenchmark.java +++ b/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/RestJson1DeserializeBenchmark.java @@ -6,18 +6,11 @@ package software.amazon.smithy.java.benchmarks.serde; import java.nio.charset.StandardCharsets; -import java.util.concurrent.TimeUnit; import org.openjdk.jmh.annotations.Benchmark; -import org.openjdk.jmh.annotations.BenchmarkMode; -import org.openjdk.jmh.annotations.Fork; -import org.openjdk.jmh.annotations.Measurement; -import org.openjdk.jmh.annotations.Mode; -import org.openjdk.jmh.annotations.OutputTimeUnit; import org.openjdk.jmh.annotations.Param; import org.openjdk.jmh.annotations.Scope; import org.openjdk.jmh.annotations.Setup; import org.openjdk.jmh.annotations.State; -import org.openjdk.jmh.annotations.Warmup; import org.openjdk.jmh.infra.Blackhole; import software.amazon.smithy.java.aws.client.restjson.RestJsonClientProtocol; import software.amazon.smithy.java.core.schema.ApiOperation; @@ -30,11 +23,6 @@ * header binding plus JSON body deserialization. */ @State(Scope.Benchmark) -@BenchmarkMode(Mode.SampleTime) -@OutputTimeUnit(TimeUnit.NANOSECONDS) -@Warmup(iterations = 5, time = 2, timeUnit = TimeUnit.SECONDS) -@Measurement(iterations = 10, time = 5, timeUnit = TimeUnit.SECONDS) -@Fork(1) public class RestJson1DeserializeBenchmark { private static final String GENERATED_PACKAGE = diff --git a/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/RestJson1SerializeBenchmark.java b/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/RestJson1SerializeBenchmark.java index 12e9a0efd..c41c52664 100644 --- a/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/RestJson1SerializeBenchmark.java +++ b/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/RestJson1SerializeBenchmark.java @@ -5,18 +5,11 @@ package software.amazon.smithy.java.benchmarks.serde; -import java.util.concurrent.TimeUnit; import org.openjdk.jmh.annotations.Benchmark; -import org.openjdk.jmh.annotations.BenchmarkMode; -import org.openjdk.jmh.annotations.Fork; -import org.openjdk.jmh.annotations.Measurement; -import org.openjdk.jmh.annotations.Mode; -import org.openjdk.jmh.annotations.OutputTimeUnit; import org.openjdk.jmh.annotations.Param; import org.openjdk.jmh.annotations.Scope; import org.openjdk.jmh.annotations.Setup; import org.openjdk.jmh.annotations.State; -import org.openjdk.jmh.annotations.Warmup; import org.openjdk.jmh.infra.Blackhole; import software.amazon.smithy.java.aws.client.restjson.RestJsonClientProtocol; import software.amazon.smithy.java.core.schema.ApiOperation; @@ -29,11 +22,6 @@ * label / query string binding plus JSON body serialization. */ @State(Scope.Benchmark) -@BenchmarkMode(Mode.SampleTime) -@OutputTimeUnit(TimeUnit.NANOSECONDS) -@Warmup(iterations = 5, time = 2, timeUnit = TimeUnit.SECONDS) -@Measurement(iterations = 10, time = 5, timeUnit = TimeUnit.SECONDS) -@Fork(1) public class RestJson1SerializeBenchmark { private static final String GENERATED_PACKAGE = diff --git a/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/RestXmlDeserializeBenchmark.java b/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/RestXmlDeserializeBenchmark.java index 12c849931..60ee72420 100644 --- a/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/RestXmlDeserializeBenchmark.java +++ b/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/RestXmlDeserializeBenchmark.java @@ -5,18 +5,11 @@ package software.amazon.smithy.java.benchmarks.serde; -import java.util.concurrent.TimeUnit; import org.openjdk.jmh.annotations.Benchmark; -import org.openjdk.jmh.annotations.BenchmarkMode; -import org.openjdk.jmh.annotations.Fork; -import org.openjdk.jmh.annotations.Measurement; -import org.openjdk.jmh.annotations.Mode; -import org.openjdk.jmh.annotations.OutputTimeUnit; import org.openjdk.jmh.annotations.Param; import org.openjdk.jmh.annotations.Scope; import org.openjdk.jmh.annotations.Setup; import org.openjdk.jmh.annotations.State; -import org.openjdk.jmh.annotations.Warmup; import org.openjdk.jmh.infra.Blackhole; import software.amazon.smithy.java.aws.client.restxml.RestXmlClientProtocol; import software.amazon.smithy.java.core.schema.ApiOperation; @@ -29,11 +22,6 @@ * binding plus XML body deserialization. */ @State(Scope.Benchmark) -@BenchmarkMode(Mode.SampleTime) -@OutputTimeUnit(TimeUnit.NANOSECONDS) -@Warmup(iterations = 5, time = 2, timeUnit = TimeUnit.SECONDS) -@Measurement(iterations = 10, time = 5, timeUnit = TimeUnit.SECONDS) -@Fork(1) public class RestXmlDeserializeBenchmark { private static final String GENERATED_PACKAGE = diff --git a/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/RestXmlSerializeBenchmark.java b/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/RestXmlSerializeBenchmark.java index d8a842227..f2db6736d 100644 --- a/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/RestXmlSerializeBenchmark.java +++ b/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/RestXmlSerializeBenchmark.java @@ -5,18 +5,11 @@ package software.amazon.smithy.java.benchmarks.serde; -import java.util.concurrent.TimeUnit; import org.openjdk.jmh.annotations.Benchmark; -import org.openjdk.jmh.annotations.BenchmarkMode; -import org.openjdk.jmh.annotations.Fork; -import org.openjdk.jmh.annotations.Measurement; -import org.openjdk.jmh.annotations.Mode; -import org.openjdk.jmh.annotations.OutputTimeUnit; import org.openjdk.jmh.annotations.Param; import org.openjdk.jmh.annotations.Scope; import org.openjdk.jmh.annotations.Setup; import org.openjdk.jmh.annotations.State; -import org.openjdk.jmh.annotations.Warmup; import org.openjdk.jmh.infra.Blackhole; import software.amazon.smithy.java.aws.client.restxml.RestXmlClientProtocol; import software.amazon.smithy.java.core.schema.ApiOperation; @@ -29,11 +22,6 @@ * label / query string binding plus XML body serialization. */ @State(Scope.Benchmark) -@BenchmarkMode(Mode.SampleTime) -@OutputTimeUnit(TimeUnit.NANOSECONDS) -@Warmup(iterations = 5, time = 2, timeUnit = TimeUnit.SECONDS) -@Measurement(iterations = 10, time = 5, timeUnit = TimeUnit.SECONDS) -@Fork(1) public class RestXmlSerializeBenchmark { private static final String GENERATED_PACKAGE = diff --git a/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/RpcV2CborDeserializeBenchmark.java b/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/RpcV2CborDeserializeBenchmark.java index 1046bd1f1..6ae937c77 100644 --- a/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/RpcV2CborDeserializeBenchmark.java +++ b/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/RpcV2CborDeserializeBenchmark.java @@ -5,18 +5,11 @@ package software.amazon.smithy.java.benchmarks.serde; -import java.util.concurrent.TimeUnit; import org.openjdk.jmh.annotations.Benchmark; -import org.openjdk.jmh.annotations.BenchmarkMode; -import org.openjdk.jmh.annotations.Fork; -import org.openjdk.jmh.annotations.Measurement; -import org.openjdk.jmh.annotations.Mode; -import org.openjdk.jmh.annotations.OutputTimeUnit; import org.openjdk.jmh.annotations.Param; import org.openjdk.jmh.annotations.Scope; import org.openjdk.jmh.annotations.Setup; import org.openjdk.jmh.annotations.State; -import org.openjdk.jmh.annotations.Warmup; import org.openjdk.jmh.infra.Blackhole; import software.amazon.smithy.java.client.rpcv2.RpcV2CborProtocol; import software.amazon.smithy.java.core.schema.ApiOperation; @@ -33,11 +26,6 @@ * the deserialization. */ @State(Scope.Benchmark) -@BenchmarkMode(Mode.SampleTime) -@OutputTimeUnit(TimeUnit.NANOSECONDS) -@Warmup(iterations = 5, time = 2, timeUnit = TimeUnit.SECONDS) -@Measurement(iterations = 10, time = 5, timeUnit = TimeUnit.SECONDS) -@Fork(1) public class RpcV2CborDeserializeBenchmark { private static final String GENERATED_PACKAGE = diff --git a/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/RpcV2CborSerializeBenchmark.java b/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/RpcV2CborSerializeBenchmark.java index 5a2c6641d..f6f94f68e 100644 --- a/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/RpcV2CborSerializeBenchmark.java +++ b/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/RpcV2CborSerializeBenchmark.java @@ -5,18 +5,11 @@ package software.amazon.smithy.java.benchmarks.serde; -import java.util.concurrent.TimeUnit; import org.openjdk.jmh.annotations.Benchmark; -import org.openjdk.jmh.annotations.BenchmarkMode; -import org.openjdk.jmh.annotations.Fork; -import org.openjdk.jmh.annotations.Measurement; -import org.openjdk.jmh.annotations.Mode; -import org.openjdk.jmh.annotations.OutputTimeUnit; import org.openjdk.jmh.annotations.Param; import org.openjdk.jmh.annotations.Scope; import org.openjdk.jmh.annotations.Setup; import org.openjdk.jmh.annotations.State; -import org.openjdk.jmh.annotations.Warmup; import org.openjdk.jmh.infra.Blackhole; import software.amazon.smithy.java.client.rpcv2.RpcV2CborProtocol; import software.amazon.smithy.java.core.schema.ApiOperation; @@ -28,11 +21,6 @@ * {@link RpcV2CborProtocol#createRequest}. */ @State(Scope.Benchmark) -@BenchmarkMode(Mode.SampleTime) -@OutputTimeUnit(TimeUnit.NANOSECONDS) -@Warmup(iterations = 5, time = 2, timeUnit = TimeUnit.SECONDS) -@Measurement(iterations = 10, time = 5, timeUnit = TimeUnit.SECONDS) -@Fork(1) public class RpcV2CborSerializeBenchmark { private static final String GENERATED_PACKAGE = diff --git a/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/SerializeState.java b/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/SerializeState.java index 0d620eab1..3d0a16143 100644 --- a/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/SerializeState.java +++ b/benchmarks/serde-benchmarks/src/jmh/java/software/amazon/smithy/java/benchmarks/serde/SerializeState.java @@ -5,13 +5,13 @@ package software.amazon.smithy.java.benchmarks.serde; -import java.nio.charset.StandardCharsets; +import java.lang.reflect.Method; import software.amazon.smithy.java.benchmarks.serde.BenchmarkTestCases.RequestEntry; import software.amazon.smithy.java.context.Context; import software.amazon.smithy.java.core.schema.ApiOperation; import software.amazon.smithy.java.core.schema.SerializableStruct; import software.amazon.smithy.java.io.uri.SmithyUri; -import software.amazon.smithy.java.json.JsonCodec; +import software.amazon.smithy.java.protocoltests.harness.ProtocolTestDocument; import software.amazon.smithy.model.node.Node; import software.amazon.smithy.model.shapes.OperationShape; @@ -25,26 +25,14 @@ *

The codegen-generated {@link ApiOperation} singleton is resolved by * reflection from the protocol-specific package (each codegen projection * emits into its own sub-package). The typed input is materialized at setup - * by serializing the test case's {@code params} {@code Node} to JSON and - * deserializing it via the codegen-generated input builder — that work - * happens here, not in the benchmark loop. + * by deserializing the test case's {@code params} {@code Node} via + * {@link ProtocolTestDocument} into the codegen-generated input builder — + * that work happens here, not in the benchmark loop. */ final class SerializeState { private static final SmithyUri ENDPOINT = SmithyUri.of("http://localhost/"); - /** - * JSON codec used at setup time to convert the test case {@code params} - * Node into the typed shape. Uses Smithy member names (not jsonName) - * because the trait params are member-name-keyed; honors - * {@code @timestampFormat} so test-trait timestamps (typically integer - * epoch seconds) are decoded into {@code Instant} fields. - */ - private static final JsonCodec SETUP_CODEC = JsonCodec.builder() - .useJsonName(false) - .useTimestampFormat(true) - .build(); - final ApiOperation operation; final SerializableStruct input; final Context context; @@ -70,22 +58,35 @@ private SerializeState( */ static SerializeState forTestCase(String testCaseId, String generatedPackage) { RequestEntry entry = BenchmarkTestCases.request(testCaseId); - OperationShape opShape = entry.operation; + OperationShape opShape = entry.operation(); + + var operation = resolveOperation(generatedPackage, opShape.getId().getName()); - ApiOperation operation = - ApiOperationLookup.resolve(generatedPackage, opShape.getId().getName()); + Node params = entry.testCase().getParams(); + var inputBuilder = operation.inputBuilder(); + new ProtocolTestDocument(params == null ? Node.objectNode() : params, null) + .deserializeInto(inputBuilder); - // Render the trait params Node directly to JSON, then deserialize via - // the codegen-generated input builder. Going Node -> JSON -> typed - // (rather than Node -> Document -> StructDocument -> JSON -> typed) - // preserves the raw integer / number forms expected by the JSON - // codec for fields with @timestampFormat = epoch-seconds. - Node params = entry.testCase.getParams(); - String json = params == null ? "{}" : Node.printJson(params); - SerializableStruct input = SETUP_CODEC.deserializeShape( - json.getBytes(StandardCharsets.UTF_8), - operation.inputBuilder()); + return new SerializeState(operation, inputBuilder.build()); + } + + @SuppressWarnings("unchecked") + static ApiOperation resolveOperation( + String generatedPackage, + String operationName + ) { + String fqcn = generatedPackage + "." + operationName; + try { + Method instanceMethod = Class.forName(fqcn).getMethod("instance"); + return (ApiOperation) instanceMethod + .invoke(null); + } catch (ReflectiveOperationException e) { + throw new IllegalStateException("Failed to resolve ApiOperation " + fqcn, e); + } + } - return new SerializeState(operation, input); + static void main() { + SerializeState.forTestCase("rpcv2Cbor_PutItemRequest_BinaryData_M", + "software.amazon.smithy.java.benchmarks.serde.generated.rpcv2cbor.model"); } } diff --git a/examples/dynamodb-client/README.md b/examples/dynamodb-client/README.md deleted file mode 100644 index a6c380e3a..000000000 --- a/examples/dynamodb-client/README.md +++ /dev/null @@ -1,19 +0,0 @@ -## Example: Dynamodb Client -Example AWS DynamoDB client using the AWS JSON 1.0 protocol and -the SigV4 auth scheme. - -**Note**: This example project is used to provide baseline performance -benchmarks - -### Usage -To use this example as a template, run the following command with the [Smithy CLI](https://smithy.io/2.0/guides/smithy-cli/index.html): - -```console -smithy init -t dynamodb-client --url https://github.com/smithy-lang/smithy-java -``` - -or - -```console -smithy init -t dynamodb-client --url git@github.com:smithy-lang/smithy-java.git -``` diff --git a/examples/dynamodb-client/build.gradle.kts b/examples/dynamodb-client/build.gradle.kts deleted file mode 100644 index e2066dc20..000000000 --- a/examples/dynamodb-client/build.gradle.kts +++ /dev/null @@ -1,67 +0,0 @@ -plugins { - `java-library` - id("software.amazon.smithy.gradle.smithy-base") - id("me.champeau.jmh") version "0.7.3" -} - -dependencies { - val smithyJavaVersion: String by project - - smithyBuild("software.amazon.smithy.java:codegen-plugin:$smithyJavaVersion") - smithyBuild("software.amazon.smithy.java:client-core:$smithyJavaVersion") - - implementation("software.amazon.smithy.java:aws-client-awsjson:$smithyJavaVersion") - implementation("software.amazon.smithy.java:client-core:$smithyJavaVersion") - implementation("software.amazon.smithy.java:aws-sigv4:$smithyJavaVersion") -} - -// Add generated Java sources to the main sourceset -afterEvaluate { - val clientPath = smithy.getPluginProjectionPath(smithy.sourceProjection.get(), "java-codegen").get() - sourceSets { - main { - java { - srcDir("$clientPath/java") - } - resources { - srcDir("$clientPath/resources") - } - } - } -} - -tasks { - compileJava { - dependsOn(smithyBuild) - } -} - -jmh { - warmupIterations = 2 - iterations = 5 - fork = 1 - // profilers.add("async:output=flamegraph") - // profilers.add("gc") -} - -// Helps Intellij IDE's discover smithy models -sourceSets { - main { - java { - srcDir("model") - } - } -} - -tasks.compileJava { - dependsOn(tasks.smithyBuild) -} - -tasks.processResources { - dependsOn(tasks.compileJava) -} - -repositories { - mavenLocal() - mavenCentral() -} diff --git a/examples/dynamodb-client/model/model.json b/examples/dynamodb-client/model/model.json deleted file mode 100644 index d18671523..000000000 --- a/examples/dynamodb-client/model/model.json +++ /dev/null @@ -1,9830 +0,0 @@ -{ - "smithy": "2.0", - "metadata": { - "suppressions": [ - { - "id": "HttpMethodSemantics", - "namespace": "*" - }, - { - "id": "HttpResponseCodeSemantics", - "namespace": "*" - }, - { - "id": "PaginatedTrait", - "namespace": "*" - }, - { - "id": "HttpHeaderTrait", - "namespace": "*" - }, - { - "id": "HttpUriConflict", - "namespace": "*" - }, - { - "id": "Service", - "namespace": "*" - }, - { - "id": "RuleSetAwsBuiltIn.AWS::Auth::AccountIdEndpointMode", - "namespace": "*" - }, - { - "id": "RuleSetAwsBuiltIn.AWS::Auth::AccountId", - "namespace": "*" - } - ] - }, - "shapes": { - "com.amazonaws.dynamodb#ApproximateCreationDateTimePrecision": { - "type": "enum", - "members": { - "MILLISECOND": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "MILLISECOND" - } - }, - "MICROSECOND": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "MICROSECOND" - } - } - } - }, - "com.amazonaws.dynamodb#ArchivalReason": { - "type": "string" - }, - "com.amazonaws.dynamodb#ArchivalSummary": { - "type": "structure", - "members": { - "ArchivalDateTime": { - "target": "com.amazonaws.dynamodb#Date", - "traits": {} - }, - "ArchivalReason": { - "target": "com.amazonaws.dynamodb#ArchivalReason", - "traits": {} - }, - "ArchivalBackupArn": { - "target": "com.amazonaws.dynamodb#BackupArn", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#AttributeAction": { - "type": "enum", - "members": { - "ADD": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "ADD" - } - }, - "PUT": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "PUT" - } - }, - "DELETE": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "DELETE" - } - } - } - }, - "com.amazonaws.dynamodb#AttributeDefinition": { - "type": "structure", - "members": { - "AttributeName": { - "target": "com.amazonaws.dynamodb#KeySchemaAttributeName", - "traits": { - "smithy.api#required": {} - } - }, - "AttributeType": { - "target": "com.amazonaws.dynamodb#ScalarAttributeType", - "traits": { - "smithy.api#required": {} - } - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#AttributeDefinitions": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#AttributeDefinition" - } - }, - "com.amazonaws.dynamodb#AttributeMap": { - "type": "map", - "key": { - "target": "com.amazonaws.dynamodb#AttributeName" - }, - "value": { - "target": "com.amazonaws.dynamodb#AttributeValue" - } - }, - "com.amazonaws.dynamodb#AttributeName": { - "type": "string", - "traits": { - "smithy.api#length": { - "min": 0, - "max": 65535 - } - } - }, - "com.amazonaws.dynamodb#AttributeNameList": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#AttributeName" - }, - "traits": { - "smithy.api#length": { - "min": 1 - } - } - }, - "com.amazonaws.dynamodb#AttributeUpdates": { - "type": "map", - "key": { - "target": "com.amazonaws.dynamodb#AttributeName" - }, - "value": { - "target": "com.amazonaws.dynamodb#AttributeValueUpdate" - } - }, - "com.amazonaws.dynamodb#AttributeValue": { - "type": "union", - "members": { - "S": { - "target": "com.amazonaws.dynamodb#StringAttributeValue", - "traits": {} - }, - "N": { - "target": "com.amazonaws.dynamodb#NumberAttributeValue", - "traits": {} - }, - "B": { - "target": "com.amazonaws.dynamodb#BinaryAttributeValue", - "traits": {} - }, - "SS": { - "target": "com.amazonaws.dynamodb#StringSetAttributeValue", - "traits": {} - }, - "NS": { - "target": "com.amazonaws.dynamodb#NumberSetAttributeValue", - "traits": {} - }, - "BS": { - "target": "com.amazonaws.dynamodb#BinarySetAttributeValue", - "traits": {} - }, - "M": { - "target": "com.amazonaws.dynamodb#MapAttributeValue", - "traits": {} - }, - "L": { - "target": "com.amazonaws.dynamodb#ListAttributeValue", - "traits": {} - }, - "NULL": { - "target": "com.amazonaws.dynamodb#NullAttributeValue", - "traits": {} - }, - "BOOL": { - "target": "com.amazonaws.dynamodb#BooleanAttributeValue", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#AttributeValueList": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#AttributeValue" - } - }, - "com.amazonaws.dynamodb#AttributeValueUpdate": { - "type": "structure", - "members": { - "Value": { - "target": "com.amazonaws.dynamodb#AttributeValue", - "traits": {} - }, - "Action": { - "target": "com.amazonaws.dynamodb#AttributeAction", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#AutoScalingPolicyDescription": { - "type": "structure", - "members": { - "PolicyName": { - "target": "com.amazonaws.dynamodb#AutoScalingPolicyName", - "traits": {} - }, - "TargetTrackingScalingPolicyConfiguration": { - "target": "com.amazonaws.dynamodb#AutoScalingTargetTrackingScalingPolicyConfigurationDescription", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#AutoScalingPolicyDescriptionList": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#AutoScalingPolicyDescription" - } - }, - "com.amazonaws.dynamodb#AutoScalingPolicyName": { - "type": "string", - "traits": { - "smithy.api#length": { - "min": 1, - "max": 256 - }, - "smithy.api#pattern": "^\\p{Print}+$" - } - }, - "com.amazonaws.dynamodb#AutoScalingPolicyUpdate": { - "type": "structure", - "members": { - "PolicyName": { - "target": "com.amazonaws.dynamodb#AutoScalingPolicyName", - "traits": {} - }, - "TargetTrackingScalingPolicyConfiguration": { - "target": "com.amazonaws.dynamodb#AutoScalingTargetTrackingScalingPolicyConfigurationUpdate", - "traits": { - "smithy.api#required": {} - } - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#AutoScalingRoleArn": { - "type": "string", - "traits": { - "smithy.api#length": { - "min": 1, - "max": 1600 - }, - "smithy.api#pattern": "^[\\u0020-\\uD7FF\\uE000-\\uFFFD\\uD800\\uDC00-\\uDBFF\\uDFFF\\r\\n\\t]*$" - } - }, - "com.amazonaws.dynamodb#AutoScalingSettingsDescription": { - "type": "structure", - "members": { - "MinimumUnits": { - "target": "com.amazonaws.dynamodb#PositiveLongObject", - "traits": {} - }, - "MaximumUnits": { - "target": "com.amazonaws.dynamodb#PositiveLongObject", - "traits": {} - }, - "AutoScalingDisabled": { - "target": "com.amazonaws.dynamodb#BooleanObject", - "traits": {} - }, - "AutoScalingRoleArn": { - "target": "com.amazonaws.dynamodb#String", - "traits": {} - }, - "ScalingPolicies": { - "target": "com.amazonaws.dynamodb#AutoScalingPolicyDescriptionList", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#AutoScalingSettingsUpdate": { - "type": "structure", - "members": { - "MinimumUnits": { - "target": "com.amazonaws.dynamodb#PositiveLongObject", - "traits": {} - }, - "MaximumUnits": { - "target": "com.amazonaws.dynamodb#PositiveLongObject", - "traits": {} - }, - "AutoScalingDisabled": { - "target": "com.amazonaws.dynamodb#BooleanObject", - "traits": {} - }, - "AutoScalingRoleArn": { - "target": "com.amazonaws.dynamodb#AutoScalingRoleArn", - "traits": {} - }, - "ScalingPolicyUpdate": { - "target": "com.amazonaws.dynamodb#AutoScalingPolicyUpdate", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#AutoScalingTargetTrackingScalingPolicyConfigurationDescription": { - "type": "structure", - "members": { - "DisableScaleIn": { - "target": "com.amazonaws.dynamodb#BooleanObject", - "traits": {} - }, - "ScaleInCooldown": { - "target": "com.amazonaws.dynamodb#IntegerObject", - "traits": {} - }, - "ScaleOutCooldown": { - "target": "com.amazonaws.dynamodb#IntegerObject", - "traits": {} - }, - "TargetValue": { - "target": "com.amazonaws.dynamodb#DoubleObject", - "traits": { - "smithy.api#required": {} - } - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#AutoScalingTargetTrackingScalingPolicyConfigurationUpdate": { - "type": "structure", - "members": { - "DisableScaleIn": { - "target": "com.amazonaws.dynamodb#BooleanObject", - "traits": {} - }, - "ScaleInCooldown": { - "target": "com.amazonaws.dynamodb#IntegerObject", - "traits": {} - }, - "ScaleOutCooldown": { - "target": "com.amazonaws.dynamodb#IntegerObject", - "traits": {} - }, - "TargetValue": { - "target": "com.amazonaws.dynamodb#DoubleObject", - "traits": { - "smithy.api#required": {} - } - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#Backfilling": { - "type": "boolean" - }, - "com.amazonaws.dynamodb#BackupArn": { - "type": "string", - "traits": { - "smithy.api#length": { - "min": 37, - "max": 1024 - } - } - }, - "com.amazonaws.dynamodb#BackupCreationDateTime": { - "type": "timestamp" - }, - "com.amazonaws.dynamodb#BackupDescription": { - "type": "structure", - "members": { - "BackupDetails": { - "target": "com.amazonaws.dynamodb#BackupDetails", - "traits": {} - }, - "SourceTableDetails": { - "target": "com.amazonaws.dynamodb#SourceTableDetails", - "traits": {} - }, - "SourceTableFeatureDetails": { - "target": "com.amazonaws.dynamodb#SourceTableFeatureDetails", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#BackupDetails": { - "type": "structure", - "members": { - "BackupArn": { - "target": "com.amazonaws.dynamodb#BackupArn", - "traits": { - "smithy.api#required": {} - } - }, - "BackupName": { - "target": "com.amazonaws.dynamodb#BackupName", - "traits": { - "smithy.api#required": {} - } - }, - "BackupSizeBytes": { - "target": "com.amazonaws.dynamodb#BackupSizeBytes", - "traits": {} - }, - "BackupStatus": { - "target": "com.amazonaws.dynamodb#BackupStatus", - "traits": { - "smithy.api#required": {} - } - }, - "BackupType": { - "target": "com.amazonaws.dynamodb#BackupType", - "traits": { - "smithy.api#required": {} - } - }, - "BackupCreationDateTime": { - "target": "com.amazonaws.dynamodb#BackupCreationDateTime", - "traits": { - "smithy.api#required": {} - } - }, - "BackupExpiryDateTime": { - "target": "com.amazonaws.dynamodb#Date", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#BackupInUseException": { - "type": "structure", - "members": { - "message": { - "target": "com.amazonaws.dynamodb#ErrorMessage" - } - }, - "traits": { - "smithy.api#error": "client" - } - }, - "com.amazonaws.dynamodb#BackupName": { - "type": "string", - "traits": { - "smithy.api#length": { - "min": 3, - "max": 255 - }, - "smithy.api#pattern": "^[a-zA-Z0-9_.-]+$" - } - }, - "com.amazonaws.dynamodb#BackupNotFoundException": { - "type": "structure", - "members": { - "message": { - "target": "com.amazonaws.dynamodb#ErrorMessage" - } - }, - "traits": { - "smithy.api#error": "client" - } - }, - "com.amazonaws.dynamodb#BackupSizeBytes": { - "type": "long", - "traits": { - "smithy.api#range": { - "min": 0 - } - } - }, - "com.amazonaws.dynamodb#BackupStatus": { - "type": "enum", - "members": { - "CREATING": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "CREATING" - } - }, - "DELETED": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "DELETED" - } - }, - "AVAILABLE": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "AVAILABLE" - } - } - } - }, - "com.amazonaws.dynamodb#BackupSummaries": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#BackupSummary" - } - }, - "com.amazonaws.dynamodb#BackupSummary": { - "type": "structure", - "members": { - "TableName": { - "target": "com.amazonaws.dynamodb#TableName", - "traits": {} - }, - "TableId": { - "target": "com.amazonaws.dynamodb#TableId", - "traits": {} - }, - "TableArn": { - "target": "com.amazonaws.dynamodb#TableArn", - "traits": {} - }, - "BackupArn": { - "target": "com.amazonaws.dynamodb#BackupArn", - "traits": {} - }, - "BackupName": { - "target": "com.amazonaws.dynamodb#BackupName", - "traits": {} - }, - "BackupCreationDateTime": { - "target": "com.amazonaws.dynamodb#BackupCreationDateTime", - "traits": {} - }, - "BackupExpiryDateTime": { - "target": "com.amazonaws.dynamodb#Date", - "traits": {} - }, - "BackupStatus": { - "target": "com.amazonaws.dynamodb#BackupStatus", - "traits": {} - }, - "BackupType": { - "target": "com.amazonaws.dynamodb#BackupType", - "traits": {} - }, - "BackupSizeBytes": { - "target": "com.amazonaws.dynamodb#BackupSizeBytes", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#BackupType": { - "type": "enum", - "members": { - "USER": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "USER" - } - }, - "SYSTEM": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "SYSTEM" - } - }, - "AWS_BACKUP": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "AWS_BACKUP" - } - } - } - }, - "com.amazonaws.dynamodb#BackupTypeFilter": { - "type": "enum", - "members": { - "USER": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "USER" - } - }, - "SYSTEM": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "SYSTEM" - } - }, - "AWS_BACKUP": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "AWS_BACKUP" - } - }, - "ALL": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "ALL" - } - } - } - }, - "com.amazonaws.dynamodb#BackupsInputLimit": { - "type": "integer", - "traits": { - "smithy.api#range": { - "min": 1, - "max": 100 - } - } - }, - "com.amazonaws.dynamodb#BatchExecuteStatement": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#BatchExecuteStatementInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#BatchExecuteStatementOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#RequestLimitExceeded" - } - ], - "traits": {} - }, - "com.amazonaws.dynamodb#BatchExecuteStatementInput": { - "type": "structure", - "members": { - "Statements": { - "target": "com.amazonaws.dynamodb#PartiQLBatchRequest", - "traits": { - "smithy.api#required": {} - } - }, - "ReturnConsumedCapacity": { - "target": "com.amazonaws.dynamodb#ReturnConsumedCapacity" - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#BatchExecuteStatementOutput": { - "type": "structure", - "members": { - "Responses": { - "target": "com.amazonaws.dynamodb#PartiQLBatchResponse", - "traits": {} - }, - "ConsumedCapacity": { - "target": "com.amazonaws.dynamodb#ConsumedCapacityMultiple", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#BatchGetItem": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#BatchGetItemInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#BatchGetItemOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#InvalidEndpointException" - }, - { - "target": "com.amazonaws.dynamodb#ProvisionedThroughputExceededException" - }, - { - "target": "com.amazonaws.dynamodb#RequestLimitExceeded" - }, - { - "target": "com.amazonaws.dynamodb#ResourceNotFoundException" - } - ], - "traits": { - "aws.api#clientDiscoveredEndpoint": { - "required": false - }, - "smithy.api#examples": [ - { - "title": "To retrieve multiple items from a table", - "documentation": "This example reads multiple items from the Music table using a batch of three GetItem requests. Only the AlbumTitle attribute is returned.", - "input": { - "RequestItems": { - "Music": { - "Keys": [ - { - "Artist": { - "S": "No One You Know" - }, - "SongTitle": { - "S": "Call Me Today" - } - }, - { - "Artist": { - "S": "Acme Band" - }, - "SongTitle": { - "S": "Happy Day" - } - }, - { - "Artist": { - "S": "No One You Know" - }, - "SongTitle": { - "S": "Scared of My Shadow" - } - } - ], - "ProjectionExpression": "AlbumTitle" - } - } - }, - "output": { - "Responses": { - "Music": [ - { - "AlbumTitle": { - "S": "Somewhat Famous" - } - }, - { - "AlbumTitle": { - "S": "Blue Sky Blues" - } - }, - { - "AlbumTitle": { - "S": "Louder Than Ever" - } - } - ] - } - } - } - ] - } - }, - "com.amazonaws.dynamodb#BatchGetItemInput": { - "type": "structure", - "members": { - "RequestItems": { - "target": "com.amazonaws.dynamodb#BatchGetRequestMap", - "traits": { - "smithy.api#required": {} - } - }, - "ReturnConsumedCapacity": { - "target": "com.amazonaws.dynamodb#ReturnConsumedCapacity" - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#BatchGetItemOutput": { - "type": "structure", - "members": { - "Responses": { - "target": "com.amazonaws.dynamodb#BatchGetResponseMap", - "traits": {} - }, - "UnprocessedKeys": { - "target": "com.amazonaws.dynamodb#BatchGetRequestMap", - "traits": {} - }, - "ConsumedCapacity": { - "target": "com.amazonaws.dynamodb#ConsumedCapacityMultiple", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#BatchGetRequestMap": { - "type": "map", - "key": { - "target": "com.amazonaws.dynamodb#TableArn" - }, - "value": { - "target": "com.amazonaws.dynamodb#KeysAndAttributes" - }, - "traits": { - "smithy.api#length": { - "min": 1, - "max": 100 - } - } - }, - "com.amazonaws.dynamodb#BatchGetResponseMap": { - "type": "map", - "key": { - "target": "com.amazonaws.dynamodb#TableArn" - }, - "value": { - "target": "com.amazonaws.dynamodb#ItemList" - } - }, - "com.amazonaws.dynamodb#BatchStatementError": { - "type": "structure", - "members": { - "Code": { - "target": "com.amazonaws.dynamodb#BatchStatementErrorCodeEnum", - "traits": {} - }, - "Message": { - "target": "com.amazonaws.dynamodb#String", - "traits": {} - }, - "Item": { - "target": "com.amazonaws.dynamodb#AttributeMap", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#BatchStatementErrorCodeEnum": { - "type": "enum", - "members": { - "ConditionalCheckFailed": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "ConditionalCheckFailed" - } - }, - "ItemCollectionSizeLimitExceeded": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "ItemCollectionSizeLimitExceeded" - } - }, - "RequestLimitExceeded": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "RequestLimitExceeded" - } - }, - "ValidationError": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "ValidationError" - } - }, - "ProvisionedThroughputExceeded": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "ProvisionedThroughputExceeded" - } - }, - "TransactionConflict": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "TransactionConflict" - } - }, - "ThrottlingError": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "ThrottlingError" - } - }, - "InternalServerError": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "InternalServerError" - } - }, - "ResourceNotFound": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "ResourceNotFound" - } - }, - "AccessDenied": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "AccessDenied" - } - }, - "DuplicateItem": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "DuplicateItem" - } - } - } - }, - "com.amazonaws.dynamodb#BatchStatementRequest": { - "type": "structure", - "members": { - "Statement": { - "target": "com.amazonaws.dynamodb#PartiQLStatement", - "traits": { - "smithy.api#required": {} - } - }, - "Parameters": { - "target": "com.amazonaws.dynamodb#PreparedStatementParameters", - "traits": {} - }, - "ConsistentRead": { - "target": "com.amazonaws.dynamodb#ConsistentRead", - "traits": {} - }, - "ReturnValuesOnConditionCheckFailure": { - "target": "com.amazonaws.dynamodb#ReturnValuesOnConditionCheckFailure", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#BatchStatementResponse": { - "type": "structure", - "members": { - "Error": { - "target": "com.amazonaws.dynamodb#BatchStatementError", - "traits": {} - }, - "TableName": { - "target": "com.amazonaws.dynamodb#TableName", - "traits": {} - }, - "Item": { - "target": "com.amazonaws.dynamodb#AttributeMap", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#BatchWriteItem": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#BatchWriteItemInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#BatchWriteItemOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#InvalidEndpointException" - }, - { - "target": "com.amazonaws.dynamodb#ItemCollectionSizeLimitExceededException" - }, - { - "target": "com.amazonaws.dynamodb#ProvisionedThroughputExceededException" - }, - { - "target": "com.amazonaws.dynamodb#RequestLimitExceeded" - }, - { - "target": "com.amazonaws.dynamodb#ResourceNotFoundException" - } - ], - "traits": { - "aws.api#clientDiscoveredEndpoint": { - "required": false - }, - "smithy.api#examples": [ - { - "title": "To add multiple items to a table", - "documentation": "This example adds three new items to the Music table using a batch of three PutItem requests.", - "input": { - "RequestItems": { - "Music": [ - { - "PutRequest": { - "Item": { - "AlbumTitle": { - "S": "Somewhat Famous" - }, - "SongTitle": { - "S": "Call Me Today" - }, - "Artist": { - "S": "No One You Know" - } - } - } - }, - { - "PutRequest": { - "Item": { - "AlbumTitle": { - "S": "Songs About Life" - }, - "SongTitle": { - "S": "Happy Day" - }, - "Artist": { - "S": "Acme Band" - } - } - } - }, - { - "PutRequest": { - "Item": { - "AlbumTitle": { - "S": "Blue Sky Blues" - }, - "SongTitle": { - "S": "Scared of My Shadow" - }, - "Artist": { - "S": "No One You Know" - } - } - } - } - ] - } - }, - "output": {} - } - ] - } - }, - "com.amazonaws.dynamodb#BatchWriteItemInput": { - "type": "structure", - "members": { - "RequestItems": { - "target": "com.amazonaws.dynamodb#BatchWriteItemRequestMap", - "traits": { - "smithy.api#required": {} - } - }, - "ReturnConsumedCapacity": { - "target": "com.amazonaws.dynamodb#ReturnConsumedCapacity" - }, - "ReturnItemCollectionMetrics": { - "target": "com.amazonaws.dynamodb#ReturnItemCollectionMetrics", - "traits": {} - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#BatchWriteItemOutput": { - "type": "structure", - "members": { - "UnprocessedItems": { - "target": "com.amazonaws.dynamodb#BatchWriteItemRequestMap", - "traits": {} - }, - "ItemCollectionMetrics": { - "target": "com.amazonaws.dynamodb#ItemCollectionMetricsPerTable", - "traits": {} - }, - "ConsumedCapacity": { - "target": "com.amazonaws.dynamodb#ConsumedCapacityMultiple", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#BatchWriteItemRequestMap": { - "type": "map", - "key": { - "target": "com.amazonaws.dynamodb#TableArn" - }, - "value": { - "target": "com.amazonaws.dynamodb#WriteRequests" - }, - "traits": { - "smithy.api#length": { - "min": 1, - "max": 25 - } - } - }, - "com.amazonaws.dynamodb#BilledSizeBytes": { - "type": "long", - "traits": { - "smithy.api#range": { - "min": 0 - } - } - }, - "com.amazonaws.dynamodb#BillingMode": { - "type": "enum", - "members": { - "PROVISIONED": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "PROVISIONED" - } - }, - "PAY_PER_REQUEST": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "PAY_PER_REQUEST" - } - } - } - }, - "com.amazonaws.dynamodb#BillingModeSummary": { - "type": "structure", - "members": { - "BillingMode": { - "target": "com.amazonaws.dynamodb#BillingMode", - "traits": {} - }, - "LastUpdateToPayPerRequestDateTime": { - "target": "com.amazonaws.dynamodb#Date", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#BinaryAttributeValue": { - "type": "blob" - }, - "com.amazonaws.dynamodb#BinarySetAttributeValue": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#BinaryAttributeValue" - } - }, - "com.amazonaws.dynamodb#BooleanAttributeValue": { - "type": "boolean" - }, - "com.amazonaws.dynamodb#BooleanObject": { - "type": "boolean" - }, - "com.amazonaws.dynamodb#CancellationReason": { - "type": "structure", - "members": { - "Item": { - "target": "com.amazonaws.dynamodb#AttributeMap", - "traits": {} - }, - "Code": { - "target": "com.amazonaws.dynamodb#Code", - "traits": {} - }, - "Message": { - "target": "com.amazonaws.dynamodb#ErrorMessage", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#CancellationReasonList": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#CancellationReason" - }, - "traits": { - "smithy.api#length": { - "min": 1, - "max": 100 - } - } - }, - "com.amazonaws.dynamodb#Capacity": { - "type": "structure", - "members": { - "ReadCapacityUnits": { - "target": "com.amazonaws.dynamodb#ConsumedCapacityUnits", - "traits": {} - }, - "WriteCapacityUnits": { - "target": "com.amazonaws.dynamodb#ConsumedCapacityUnits", - "traits": {} - }, - "CapacityUnits": { - "target": "com.amazonaws.dynamodb#ConsumedCapacityUnits", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#ClientRequestToken": { - "type": "string", - "traits": { - "smithy.api#length": { - "min": 1, - "max": 36 - } - } - }, - "com.amazonaws.dynamodb#ClientToken": { - "type": "string", - "traits": { - "smithy.api#pattern": "^[^\\$]+$" - } - }, - "com.amazonaws.dynamodb#CloudWatchLogGroupArn": { - "type": "string", - "traits": { - "smithy.api#length": { - "min": 1, - "max": 1024 - } - } - }, - "com.amazonaws.dynamodb#Code": { - "type": "string" - }, - "com.amazonaws.dynamodb#ComparisonOperator": { - "type": "enum", - "members": { - "EQ": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "EQ" - } - }, - "NE": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "NE" - } - }, - "IN": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "IN" - } - }, - "LE": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "LE" - } - }, - "LT": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "LT" - } - }, - "GE": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "GE" - } - }, - "GT": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "GT" - } - }, - "BETWEEN": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "BETWEEN" - } - }, - "NOT_NULL": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "NOT_NULL" - } - }, - "NULL": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "NULL" - } - }, - "CONTAINS": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "CONTAINS" - } - }, - "NOT_CONTAINS": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "NOT_CONTAINS" - } - }, - "BEGINS_WITH": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "BEGINS_WITH" - } - } - } - }, - "com.amazonaws.dynamodb#Condition": { - "type": "structure", - "members": { - "AttributeValueList": { - "target": "com.amazonaws.dynamodb#AttributeValueList", - "traits": {} - }, - "ComparisonOperator": { - "target": "com.amazonaws.dynamodb#ComparisonOperator", - "traits": { - "smithy.api#required": {} - } - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#ConditionCheck": { - "type": "structure", - "members": { - "Key": { - "target": "com.amazonaws.dynamodb#Key", - "traits": { - "smithy.api#required": {} - } - }, - "TableName": { - "target": "com.amazonaws.dynamodb#TableArn", - "traits": { - "smithy.api#required": {} - } - }, - "ConditionExpression": { - "target": "com.amazonaws.dynamodb#ConditionExpression", - "traits": { - "smithy.api#required": {} - } - }, - "ExpressionAttributeNames": { - "target": "com.amazonaws.dynamodb#ExpressionAttributeNameMap", - "traits": {} - }, - "ExpressionAttributeValues": { - "target": "com.amazonaws.dynamodb#ExpressionAttributeValueMap", - "traits": {} - }, - "ReturnValuesOnConditionCheckFailure": { - "target": "com.amazonaws.dynamodb#ReturnValuesOnConditionCheckFailure", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#ConditionExpression": { - "type": "string" - }, - "com.amazonaws.dynamodb#ConditionalCheckFailedException": { - "type": "structure", - "members": { - "message": { - "target": "com.amazonaws.dynamodb#ErrorMessage", - "traits": {} - }, - "Item": { - "target": "com.amazonaws.dynamodb#AttributeMap", - "traits": {} - } - }, - "traits": { - "smithy.api#error": "client" - } - }, - "com.amazonaws.dynamodb#ConditionalOperator": { - "type": "enum", - "members": { - "AND": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "AND" - } - }, - "OR": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "OR" - } - } - } - }, - "com.amazonaws.dynamodb#ConfirmRemoveSelfResourceAccess": { - "type": "boolean", - "traits": { - "smithy.api#default": false - } - }, - "com.amazonaws.dynamodb#ConsistentRead": { - "type": "boolean" - }, - "com.amazonaws.dynamodb#ConsumedCapacity": { - "type": "structure", - "members": { - "TableName": { - "target": "com.amazonaws.dynamodb#TableArn", - "traits": {} - }, - "CapacityUnits": { - "target": "com.amazonaws.dynamodb#ConsumedCapacityUnits", - "traits": {} - }, - "ReadCapacityUnits": { - "target": "com.amazonaws.dynamodb#ConsumedCapacityUnits", - "traits": {} - }, - "WriteCapacityUnits": { - "target": "com.amazonaws.dynamodb#ConsumedCapacityUnits", - "traits": {} - }, - "Table": { - "target": "com.amazonaws.dynamodb#Capacity", - "traits": {} - }, - "LocalSecondaryIndexes": { - "target": "com.amazonaws.dynamodb#SecondaryIndexesCapacityMap", - "traits": {} - }, - "GlobalSecondaryIndexes": { - "target": "com.amazonaws.dynamodb#SecondaryIndexesCapacityMap", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#ConsumedCapacityMultiple": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#ConsumedCapacity" - } - }, - "com.amazonaws.dynamodb#ConsumedCapacityUnits": { - "type": "double" - }, - "com.amazonaws.dynamodb#ContinuousBackupsDescription": { - "type": "structure", - "members": { - "ContinuousBackupsStatus": { - "target": "com.amazonaws.dynamodb#ContinuousBackupsStatus", - "traits": { - "smithy.api#required": {} - } - }, - "PointInTimeRecoveryDescription": { - "target": "com.amazonaws.dynamodb#PointInTimeRecoveryDescription", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#ContinuousBackupsStatus": { - "type": "enum", - "members": { - "ENABLED": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "ENABLED" - } - }, - "DISABLED": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "DISABLED" - } - } - } - }, - "com.amazonaws.dynamodb#ContinuousBackupsUnavailableException": { - "type": "structure", - "members": { - "message": { - "target": "com.amazonaws.dynamodb#ErrorMessage" - } - }, - "traits": { - "smithy.api#error": "client" - } - }, - "com.amazonaws.dynamodb#ContributorInsightsAction": { - "type": "enum", - "members": { - "ENABLE": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "ENABLE" - } - }, - "DISABLE": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "DISABLE" - } - } - } - }, - "com.amazonaws.dynamodb#ContributorInsightsRule": { - "type": "string", - "traits": { - "smithy.api#pattern": "^[A-Za-z0-9][A-Za-z0-9\\-\\_\\.]{0,126}[A-Za-z0-9]$" - } - }, - "com.amazonaws.dynamodb#ContributorInsightsRuleList": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#ContributorInsightsRule" - } - }, - "com.amazonaws.dynamodb#ContributorInsightsStatus": { - "type": "enum", - "members": { - "ENABLING": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "ENABLING" - } - }, - "ENABLED": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "ENABLED" - } - }, - "DISABLING": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "DISABLING" - } - }, - "DISABLED": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "DISABLED" - } - }, - "FAILED": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "FAILED" - } - } - } - }, - "com.amazonaws.dynamodb#ContributorInsightsSummaries": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#ContributorInsightsSummary" - } - }, - "com.amazonaws.dynamodb#ContributorInsightsSummary": { - "type": "structure", - "members": { - "TableName": { - "target": "com.amazonaws.dynamodb#TableName", - "traits": {} - }, - "IndexName": { - "target": "com.amazonaws.dynamodb#IndexName", - "traits": {} - }, - "ContributorInsightsStatus": { - "target": "com.amazonaws.dynamodb#ContributorInsightsStatus", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#CreateBackup": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#CreateBackupInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#CreateBackupOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#BackupInUseException" - }, - { - "target": "com.amazonaws.dynamodb#ContinuousBackupsUnavailableException" - }, - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#InvalidEndpointException" - }, - { - "target": "com.amazonaws.dynamodb#LimitExceededException" - }, - { - "target": "com.amazonaws.dynamodb#TableInUseException" - }, - { - "target": "com.amazonaws.dynamodb#TableNotFoundException" - } - ], - "traits": { - "aws.api#clientDiscoveredEndpoint": { - "required": false - } - } - }, - "com.amazonaws.dynamodb#CreateBackupInput": { - "type": "structure", - "members": { - "TableName": { - "target": "com.amazonaws.dynamodb#TableArn", - "traits": { - "smithy.api#required": {} - } - }, - "BackupName": { - "target": "com.amazonaws.dynamodb#BackupName", - "traits": { - "smithy.api#required": {} - } - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#CreateBackupOutput": { - "type": "structure", - "members": { - "BackupDetails": { - "target": "com.amazonaws.dynamodb#BackupDetails", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#CreateGlobalSecondaryIndexAction": { - "type": "structure", - "members": { - "IndexName": { - "target": "com.amazonaws.dynamodb#IndexName", - "traits": { - "smithy.api#required": {} - } - }, - "KeySchema": { - "target": "com.amazonaws.dynamodb#KeySchema", - "traits": { - "smithy.api#required": {} - } - }, - "Projection": { - "target": "com.amazonaws.dynamodb#Projection", - "traits": { - "smithy.api#required": {} - } - }, - "ProvisionedThroughput": { - "target": "com.amazonaws.dynamodb#ProvisionedThroughput", - "traits": {} - }, - "OnDemandThroughput": { - "target": "com.amazonaws.dynamodb#OnDemandThroughput", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#CreateGlobalTable": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#CreateGlobalTableInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#CreateGlobalTableOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#GlobalTableAlreadyExistsException" - }, - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#InvalidEndpointException" - }, - { - "target": "com.amazonaws.dynamodb#LimitExceededException" - }, - { - "target": "com.amazonaws.dynamodb#TableNotFoundException" - } - ], - "traits": { - "aws.api#clientDiscoveredEndpoint": { - "required": false - } - } - }, - "com.amazonaws.dynamodb#CreateGlobalTableInput": { - "type": "structure", - "members": { - "GlobalTableName": { - "target": "com.amazonaws.dynamodb#TableName", - "traits": { - "smithy.api#required": {} - } - }, - "ReplicationGroup": { - "target": "com.amazonaws.dynamodb#ReplicaList", - "traits": { - "smithy.api#required": {} - } - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#CreateGlobalTableOutput": { - "type": "structure", - "members": { - "GlobalTableDescription": { - "target": "com.amazonaws.dynamodb#GlobalTableDescription", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#CreateReplicaAction": { - "type": "structure", - "members": { - "RegionName": { - "target": "com.amazonaws.dynamodb#RegionName", - "traits": { - "smithy.api#required": {} - } - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#CreateReplicationGroupMemberAction": { - "type": "structure", - "members": { - "RegionName": { - "target": "com.amazonaws.dynamodb#RegionName", - "traits": { - "smithy.api#required": {} - } - }, - "KMSMasterKeyId": { - "target": "com.amazonaws.dynamodb#KMSMasterKeyId", - "traits": {} - }, - "ProvisionedThroughputOverride": { - "target": "com.amazonaws.dynamodb#ProvisionedThroughputOverride", - "traits": {} - }, - "OnDemandThroughputOverride": { - "target": "com.amazonaws.dynamodb#OnDemandThroughputOverride", - "traits": {} - }, - "GlobalSecondaryIndexes": { - "target": "com.amazonaws.dynamodb#ReplicaGlobalSecondaryIndexList", - "traits": {} - }, - "TableClassOverride": { - "target": "com.amazonaws.dynamodb#TableClass", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#CreateTable": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#CreateTableInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#CreateTableOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#InvalidEndpointException" - }, - { - "target": "com.amazonaws.dynamodb#LimitExceededException" - }, - { - "target": "com.amazonaws.dynamodb#ResourceInUseException" - } - ], - "traits": { - "aws.api#clientDiscoveredEndpoint": { - "required": false - } - } - }, - "com.amazonaws.dynamodb#CreateTableInput": { - "type": "structure", - "members": { - "AttributeDefinitions": { - "target": "com.amazonaws.dynamodb#AttributeDefinitions", - "traits": { - "smithy.api#required": {} - } - }, - "TableName": { - "target": "com.amazonaws.dynamodb#TableArn", - "traits": { - "smithy.api#required": {} - } - }, - "KeySchema": { - "target": "com.amazonaws.dynamodb#KeySchema", - "traits": { - "smithy.api#required": {} - } - }, - "LocalSecondaryIndexes": { - "target": "com.amazonaws.dynamodb#LocalSecondaryIndexList", - "traits": {} - }, - "GlobalSecondaryIndexes": { - "target": "com.amazonaws.dynamodb#GlobalSecondaryIndexList", - "traits": {} - }, - "BillingMode": { - "target": "com.amazonaws.dynamodb#BillingMode", - "traits": {} - }, - "ProvisionedThroughput": { - "target": "com.amazonaws.dynamodb#ProvisionedThroughput", - "traits": {} - }, - "StreamSpecification": { - "target": "com.amazonaws.dynamodb#StreamSpecification", - "traits": {} - }, - "SSESpecification": { - "target": "com.amazonaws.dynamodb#SSESpecification", - "traits": {} - }, - "Tags": { - "target": "com.amazonaws.dynamodb#TagList", - "traits": {} - }, - "TableClass": { - "target": "com.amazonaws.dynamodb#TableClass", - "traits": {} - }, - "DeletionProtectionEnabled": { - "target": "com.amazonaws.dynamodb#DeletionProtectionEnabled", - "traits": {} - }, - "ResourcePolicy": { - "target": "com.amazonaws.dynamodb#ResourcePolicy", - "traits": {} - }, - "OnDemandThroughput": { - "target": "com.amazonaws.dynamodb#OnDemandThroughput", - "traits": {} - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#CreateTableOutput": { - "type": "structure", - "members": { - "TableDescription": { - "target": "com.amazonaws.dynamodb#TableDescription", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#CsvDelimiter": { - "type": "string", - "traits": { - "smithy.api#length": { - "min": 1, - "max": 1 - }, - "smithy.api#pattern": "^[,;:|\\t ]$" - } - }, - "com.amazonaws.dynamodb#CsvHeader": { - "type": "string", - "traits": { - "smithy.api#length": { - "min": 1, - "max": 65536 - }, - "smithy.api#pattern": "^[\\x20-\\x21\\x23-\\x2B\\x2D-\\x7E]*$" - } - }, - "com.amazonaws.dynamodb#CsvHeaderList": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#CsvHeader" - }, - "traits": { - "smithy.api#length": { - "min": 1, - "max": 255 - } - } - }, - "com.amazonaws.dynamodb#CsvOptions": { - "type": "structure", - "members": { - "Delimiter": { - "target": "com.amazonaws.dynamodb#CsvDelimiter", - "traits": {} - }, - "HeaderList": { - "target": "com.amazonaws.dynamodb#CsvHeaderList", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#Date": { - "type": "timestamp" - }, - "com.amazonaws.dynamodb#Delete": { - "type": "structure", - "members": { - "Key": { - "target": "com.amazonaws.dynamodb#Key", - "traits": { - "smithy.api#required": {} - } - }, - "TableName": { - "target": "com.amazonaws.dynamodb#TableArn", - "traits": { - "smithy.api#required": {} - } - }, - "ConditionExpression": { - "target": "com.amazonaws.dynamodb#ConditionExpression", - "traits": {} - }, - "ExpressionAttributeNames": { - "target": "com.amazonaws.dynamodb#ExpressionAttributeNameMap", - "traits": {} - }, - "ExpressionAttributeValues": { - "target": "com.amazonaws.dynamodb#ExpressionAttributeValueMap", - "traits": {} - }, - "ReturnValuesOnConditionCheckFailure": { - "target": "com.amazonaws.dynamodb#ReturnValuesOnConditionCheckFailure", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#DeleteBackup": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#DeleteBackupInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#DeleteBackupOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#BackupInUseException" - }, - { - "target": "com.amazonaws.dynamodb#BackupNotFoundException" - }, - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#InvalidEndpointException" - }, - { - "target": "com.amazonaws.dynamodb#LimitExceededException" - } - ], - "traits": { - "aws.api#clientDiscoveredEndpoint": { - "required": false - } - } - }, - "com.amazonaws.dynamodb#DeleteBackupInput": { - "type": "structure", - "members": { - "BackupArn": { - "target": "com.amazonaws.dynamodb#BackupArn", - "traits": { - "smithy.api#required": {} - } - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#DeleteBackupOutput": { - "type": "structure", - "members": { - "BackupDescription": { - "target": "com.amazonaws.dynamodb#BackupDescription", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#DeleteGlobalSecondaryIndexAction": { - "type": "structure", - "members": { - "IndexName": { - "target": "com.amazonaws.dynamodb#IndexName", - "traits": { - "smithy.api#required": {} - } - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#DeleteItem": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#DeleteItemInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#DeleteItemOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#ConditionalCheckFailedException" - }, - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#InvalidEndpointException" - }, - { - "target": "com.amazonaws.dynamodb#ItemCollectionSizeLimitExceededException" - }, - { - "target": "com.amazonaws.dynamodb#ProvisionedThroughputExceededException" - }, - { - "target": "com.amazonaws.dynamodb#RequestLimitExceeded" - }, - { - "target": "com.amazonaws.dynamodb#ResourceNotFoundException" - }, - { - "target": "com.amazonaws.dynamodb#TransactionConflictException" - } - ], - "traits": { - "aws.api#clientDiscoveredEndpoint": { - "required": false - }, - "smithy.api#examples": [ - { - "title": "To delete an item", - "documentation": "This example deletes an item from the Music table.", - "input": { - "TableName": "Music", - "Key": { - "Artist": { - "S": "No One You Know" - }, - "SongTitle": { - "S": "Scared of My Shadow" - } - } - }, - "output": { - "ConsumedCapacity": { - "CapacityUnits": 1, - "TableName": "Music" - } - } - } - ] - } - }, - "com.amazonaws.dynamodb#DeleteItemInput": { - "type": "structure", - "members": { - "TableName": { - "target": "com.amazonaws.dynamodb#TableArn", - "traits": { - "smithy.api#required": {} - } - }, - "Key": { - "target": "com.amazonaws.dynamodb#Key", - "traits": { - "smithy.api#required": {} - } - }, - "Expected": { - "target": "com.amazonaws.dynamodb#ExpectedAttributeMap", - "traits": {} - }, - "ConditionalOperator": { - "target": "com.amazonaws.dynamodb#ConditionalOperator", - "traits": {} - }, - "ReturnValues": { - "target": "com.amazonaws.dynamodb#ReturnValue", - "traits": {} - }, - "ReturnConsumedCapacity": { - "target": "com.amazonaws.dynamodb#ReturnConsumedCapacity" - }, - "ReturnItemCollectionMetrics": { - "target": "com.amazonaws.dynamodb#ReturnItemCollectionMetrics", - "traits": {} - }, - "ConditionExpression": { - "target": "com.amazonaws.dynamodb#ConditionExpression", - "traits": {} - }, - "ExpressionAttributeNames": { - "target": "com.amazonaws.dynamodb#ExpressionAttributeNameMap", - "traits": {} - }, - "ExpressionAttributeValues": { - "target": "com.amazonaws.dynamodb#ExpressionAttributeValueMap", - "traits": {} - }, - "ReturnValuesOnConditionCheckFailure": { - "target": "com.amazonaws.dynamodb#ReturnValuesOnConditionCheckFailure", - "traits": {} - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#DeleteItemOutput": { - "type": "structure", - "members": { - "Attributes": { - "target": "com.amazonaws.dynamodb#AttributeMap", - "traits": {} - }, - "ConsumedCapacity": { - "target": "com.amazonaws.dynamodb#ConsumedCapacity", - "traits": {} - }, - "ItemCollectionMetrics": { - "target": "com.amazonaws.dynamodb#ItemCollectionMetrics", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#DeleteReplicaAction": { - "type": "structure", - "members": { - "RegionName": { - "target": "com.amazonaws.dynamodb#RegionName", - "traits": { - "smithy.api#required": {} - } - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#DeleteReplicationGroupMemberAction": { - "type": "structure", - "members": { - "RegionName": { - "target": "com.amazonaws.dynamodb#RegionName", - "traits": { - "smithy.api#required": {} - } - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#DeleteRequest": { - "type": "structure", - "members": { - "Key": { - "target": "com.amazonaws.dynamodb#Key", - "traits": { - "smithy.api#required": {} - } - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#DeleteResourcePolicy": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#DeleteResourcePolicyInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#DeleteResourcePolicyOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#InvalidEndpointException" - }, - { - "target": "com.amazonaws.dynamodb#LimitExceededException" - }, - { - "target": "com.amazonaws.dynamodb#PolicyNotFoundException" - }, - { - "target": "com.amazonaws.dynamodb#ResourceInUseException" - }, - { - "target": "com.amazonaws.dynamodb#ResourceNotFoundException" - } - ], - "traits": { - "aws.api#clientDiscoveredEndpoint": { - "required": false - } - } - }, - "com.amazonaws.dynamodb#DeleteResourcePolicyInput": { - "type": "structure", - "members": { - "ResourceArn": { - "target": "com.amazonaws.dynamodb#ResourceArnString", - "traits": { - "smithy.api#required": {} - } - }, - "ExpectedRevisionId": { - "target": "com.amazonaws.dynamodb#PolicyRevisionId", - "traits": {} - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#DeleteResourcePolicyOutput": { - "type": "structure", - "members": { - "RevisionId": { - "target": "com.amazonaws.dynamodb#PolicyRevisionId", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#DeleteTable": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#DeleteTableInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#DeleteTableOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#InvalidEndpointException" - }, - { - "target": "com.amazonaws.dynamodb#LimitExceededException" - }, - { - "target": "com.amazonaws.dynamodb#ResourceInUseException" - }, - { - "target": "com.amazonaws.dynamodb#ResourceNotFoundException" - } - ], - "traits": { - "aws.api#clientDiscoveredEndpoint": { - "required": false - }, - "smithy.api#examples": [ - { - "title": "To delete a table", - "documentation": "This example deletes the Music table.", - "input": { - "TableName": "Music" - }, - "output": { - "TableDescription": { - "TableStatus": "DELETING", - "TableSizeBytes": 0, - "ItemCount": 0, - "TableName": "Music", - "ProvisionedThroughput": { - "NumberOfDecreasesToday": 1, - "WriteCapacityUnits": 5, - "ReadCapacityUnits": 5 - } - } - } - } - ] - } - }, - "com.amazonaws.dynamodb#DeleteTableInput": { - "type": "structure", - "members": { - "TableName": { - "target": "com.amazonaws.dynamodb#TableArn", - "traits": { - "smithy.api#required": {} - } - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#DeleteTableOutput": { - "type": "structure", - "members": { - "TableDescription": { - "target": "com.amazonaws.dynamodb#TableDescription", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#DeletionProtectionEnabled": { - "type": "boolean" - }, - "com.amazonaws.dynamodb#DescribeBackup": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#DescribeBackupInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#DescribeBackupOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#BackupNotFoundException" - }, - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#InvalidEndpointException" - } - ], - "traits": { - "aws.api#clientDiscoveredEndpoint": { - "required": false - } - } - }, - "com.amazonaws.dynamodb#DescribeBackupInput": { - "type": "structure", - "members": { - "BackupArn": { - "target": "com.amazonaws.dynamodb#BackupArn", - "traits": { - "smithy.api#required": {} - } - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#DescribeBackupOutput": { - "type": "structure", - "members": { - "BackupDescription": { - "target": "com.amazonaws.dynamodb#BackupDescription", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#DescribeContinuousBackups": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#DescribeContinuousBackupsInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#DescribeContinuousBackupsOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#InvalidEndpointException" - }, - { - "target": "com.amazonaws.dynamodb#TableNotFoundException" - } - ], - "traits": { - "aws.api#clientDiscoveredEndpoint": { - "required": false - } - } - }, - "com.amazonaws.dynamodb#DescribeContinuousBackupsInput": { - "type": "structure", - "members": { - "TableName": { - "target": "com.amazonaws.dynamodb#TableArn", - "traits": { - "smithy.api#required": {} - } - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#DescribeContinuousBackupsOutput": { - "type": "structure", - "members": { - "ContinuousBackupsDescription": { - "target": "com.amazonaws.dynamodb#ContinuousBackupsDescription", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#DescribeContributorInsights": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#DescribeContributorInsightsInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#DescribeContributorInsightsOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#ResourceNotFoundException" - } - ], - "traits": {} - }, - "com.amazonaws.dynamodb#DescribeContributorInsightsInput": { - "type": "structure", - "members": { - "TableName": { - "target": "com.amazonaws.dynamodb#TableArn", - "traits": { - "smithy.api#required": {} - } - }, - "IndexName": { - "target": "com.amazonaws.dynamodb#IndexName", - "traits": {} - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#DescribeContributorInsightsOutput": { - "type": "structure", - "members": { - "TableName": { - "target": "com.amazonaws.dynamodb#TableName", - "traits": {} - }, - "IndexName": { - "target": "com.amazonaws.dynamodb#IndexName", - "traits": {} - }, - "ContributorInsightsRuleList": { - "target": "com.amazonaws.dynamodb#ContributorInsightsRuleList", - "traits": {} - }, - "ContributorInsightsStatus": { - "target": "com.amazonaws.dynamodb#ContributorInsightsStatus", - "traits": {} - }, - "LastUpdateDateTime": { - "target": "com.amazonaws.dynamodb#LastUpdateDateTime", - "traits": {} - }, - "FailureException": { - "target": "com.amazonaws.dynamodb#FailureException", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#DescribeEndpoints": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#DescribeEndpointsRequest" - }, - "output": { - "target": "com.amazonaws.dynamodb#DescribeEndpointsResponse" - }, - "traits": {} - }, - "com.amazonaws.dynamodb#DescribeEndpointsRequest": { - "type": "structure", - "members": {}, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#DescribeEndpointsResponse": { - "type": "structure", - "members": { - "Endpoints": { - "target": "com.amazonaws.dynamodb#Endpoints", - "traits": { - "smithy.api#required": {} - } - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#DescribeExport": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#DescribeExportInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#DescribeExportOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#ExportNotFoundException" - }, - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#LimitExceededException" - } - ], - "traits": {} - }, - "com.amazonaws.dynamodb#DescribeExportInput": { - "type": "structure", - "members": { - "ExportArn": { - "target": "com.amazonaws.dynamodb#ExportArn", - "traits": { - "smithy.api#required": {} - } - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#DescribeExportOutput": { - "type": "structure", - "members": { - "ExportDescription": { - "target": "com.amazonaws.dynamodb#ExportDescription", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#DescribeGlobalTable": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#DescribeGlobalTableInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#DescribeGlobalTableOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#GlobalTableNotFoundException" - }, - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#InvalidEndpointException" - } - ], - "traits": { - "aws.api#clientDiscoveredEndpoint": { - "required": false - } - } - }, - "com.amazonaws.dynamodb#DescribeGlobalTableInput": { - "type": "structure", - "members": { - "GlobalTableName": { - "target": "com.amazonaws.dynamodb#TableName", - "traits": { - "smithy.api#required": {} - } - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#DescribeGlobalTableOutput": { - "type": "structure", - "members": { - "GlobalTableDescription": { - "target": "com.amazonaws.dynamodb#GlobalTableDescription", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#DescribeGlobalTableSettings": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#DescribeGlobalTableSettingsInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#DescribeGlobalTableSettingsOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#GlobalTableNotFoundException" - }, - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#InvalidEndpointException" - } - ], - "traits": { - "aws.api#clientDiscoveredEndpoint": { - "required": false - } - } - }, - "com.amazonaws.dynamodb#DescribeGlobalTableSettingsInput": { - "type": "structure", - "members": { - "GlobalTableName": { - "target": "com.amazonaws.dynamodb#TableName", - "traits": { - "smithy.api#required": {} - } - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#DescribeGlobalTableSettingsOutput": { - "type": "structure", - "members": { - "GlobalTableName": { - "target": "com.amazonaws.dynamodb#TableName", - "traits": {} - }, - "ReplicaSettings": { - "target": "com.amazonaws.dynamodb#ReplicaSettingsDescriptionList", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#DescribeImport": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#DescribeImportInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#DescribeImportOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#ImportNotFoundException" - } - ], - "traits": {} - }, - "com.amazonaws.dynamodb#DescribeImportInput": { - "type": "structure", - "members": { - "ImportArn": { - "target": "com.amazonaws.dynamodb#ImportArn", - "traits": { - "smithy.api#required": {} - } - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#DescribeImportOutput": { - "type": "structure", - "members": { - "ImportTableDescription": { - "target": "com.amazonaws.dynamodb#ImportTableDescription", - "traits": { - "smithy.api#required": {} - } - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#DescribeKinesisStreamingDestination": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#DescribeKinesisStreamingDestinationInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#DescribeKinesisStreamingDestinationOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#InvalidEndpointException" - }, - { - "target": "com.amazonaws.dynamodb#ResourceNotFoundException" - } - ], - "traits": { - "aws.api#clientDiscoveredEndpoint": { - "required": false - } - } - }, - "com.amazonaws.dynamodb#DescribeKinesisStreamingDestinationInput": { - "type": "structure", - "members": { - "TableName": { - "target": "com.amazonaws.dynamodb#TableArn", - "traits": { - "smithy.api#required": {} - } - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#DescribeKinesisStreamingDestinationOutput": { - "type": "structure", - "members": { - "TableName": { - "target": "com.amazonaws.dynamodb#TableName", - "traits": {} - }, - "KinesisDataStreamDestinations": { - "target": "com.amazonaws.dynamodb#KinesisDataStreamDestinations", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#DescribeLimits": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#DescribeLimitsInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#DescribeLimitsOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#InvalidEndpointException" - } - ], - "traits": { - "aws.api#clientDiscoveredEndpoint": { - "required": false - }, - "smithy.api#examples": [ - { - "title": "To determine capacity limits per table and account, in the current AWS region", - "documentation": "The following example returns the maximum read and write capacity units per table, and for the AWS account, in the current AWS region.", - "output": { - "TableMaxWriteCapacityUnits": 10000, - "TableMaxReadCapacityUnits": 10000, - "AccountMaxReadCapacityUnits": 20000, - "AccountMaxWriteCapacityUnits": 20000 - } - } - ] - } - }, - "com.amazonaws.dynamodb#DescribeLimitsInput": { - "type": "structure", - "members": {}, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#DescribeLimitsOutput": { - "type": "structure", - "members": { - "AccountMaxReadCapacityUnits": { - "target": "com.amazonaws.dynamodb#PositiveLongObject", - "traits": {} - }, - "AccountMaxWriteCapacityUnits": { - "target": "com.amazonaws.dynamodb#PositiveLongObject", - "traits": {} - }, - "TableMaxReadCapacityUnits": { - "target": "com.amazonaws.dynamodb#PositiveLongObject", - "traits": {} - }, - "TableMaxWriteCapacityUnits": { - "target": "com.amazonaws.dynamodb#PositiveLongObject", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#DescribeTable": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#DescribeTableInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#DescribeTableOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#InvalidEndpointException" - }, - { - "target": "com.amazonaws.dynamodb#ResourceNotFoundException" - } - ], - "traits": { - "aws.api#clientDiscoveredEndpoint": { - "required": false - } - } - }, - "com.amazonaws.dynamodb#DescribeTableInput": { - "type": "structure", - "members": { - "TableName": { - "target": "com.amazonaws.dynamodb#TableArn", - "traits": { - "smithy.api#required": {} - } - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#DescribeTableOutput": { - "type": "structure", - "members": { - "Table": { - "target": "com.amazonaws.dynamodb#TableDescription", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#DescribeTableReplicaAutoScaling": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#DescribeTableReplicaAutoScalingInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#DescribeTableReplicaAutoScalingOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#ResourceNotFoundException" - } - ], - "traits": {} - }, - "com.amazonaws.dynamodb#DescribeTableReplicaAutoScalingInput": { - "type": "structure", - "members": { - "TableName": { - "target": "com.amazonaws.dynamodb#TableArn", - "traits": { - "smithy.api#required": {} - } - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#DescribeTableReplicaAutoScalingOutput": { - "type": "structure", - "members": { - "TableAutoScalingDescription": { - "target": "com.amazonaws.dynamodb#TableAutoScalingDescription", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#DescribeTimeToLive": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#DescribeTimeToLiveInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#DescribeTimeToLiveOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#InvalidEndpointException" - }, - { - "target": "com.amazonaws.dynamodb#ResourceNotFoundException" - } - ], - "traits": { - "aws.api#clientDiscoveredEndpoint": { - "required": false - } - } - }, - "com.amazonaws.dynamodb#DescribeTimeToLiveInput": { - "type": "structure", - "members": { - "TableName": { - "target": "com.amazonaws.dynamodb#TableArn", - "traits": { - "smithy.api#required": {} - } - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#DescribeTimeToLiveOutput": { - "type": "structure", - "members": { - "TimeToLiveDescription": { - "target": "com.amazonaws.dynamodb#TimeToLiveDescription", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#DestinationStatus": { - "type": "enum", - "members": { - "ENABLING": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "ENABLING" - } - }, - "ACTIVE": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "ACTIVE" - } - }, - "DISABLING": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "DISABLING" - } - }, - "DISABLED": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "DISABLED" - } - }, - "ENABLE_FAILED": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "ENABLE_FAILED" - } - }, - "UPDATING": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "UPDATING" - } - } - } - }, - "com.amazonaws.dynamodb#DisableKinesisStreamingDestination": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#KinesisStreamingDestinationInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#KinesisStreamingDestinationOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#InvalidEndpointException" - }, - { - "target": "com.amazonaws.dynamodb#LimitExceededException" - }, - { - "target": "com.amazonaws.dynamodb#ResourceInUseException" - }, - { - "target": "com.amazonaws.dynamodb#ResourceNotFoundException" - } - ], - "traits": { - "aws.api#clientDiscoveredEndpoint": { - "required": false - } - } - }, - "com.amazonaws.dynamodb#DoubleObject": { - "type": "double" - }, - "com.amazonaws.dynamodb#DuplicateItemException": { - "type": "structure", - "members": { - "message": { - "target": "com.amazonaws.dynamodb#ErrorMessage" - } - }, - "traits": { - "smithy.api#error": "client" - } - }, - "com.amazonaws.dynamodb#DynamoDB_20120810": { - "type": "service", - "version": "2012-08-10", - "operations": [ - { - "target": "com.amazonaws.dynamodb#BatchExecuteStatement" - }, - { - "target": "com.amazonaws.dynamodb#BatchGetItem" - }, - { - "target": "com.amazonaws.dynamodb#BatchWriteItem" - }, - { - "target": "com.amazonaws.dynamodb#CreateBackup" - }, - { - "target": "com.amazonaws.dynamodb#CreateGlobalTable" - }, - { - "target": "com.amazonaws.dynamodb#CreateTable" - }, - { - "target": "com.amazonaws.dynamodb#DeleteBackup" - }, - { - "target": "com.amazonaws.dynamodb#DeleteItem" - }, - { - "target": "com.amazonaws.dynamodb#DeleteResourcePolicy" - }, - { - "target": "com.amazonaws.dynamodb#DeleteTable" - }, - { - "target": "com.amazonaws.dynamodb#DescribeBackup" - }, - { - "target": "com.amazonaws.dynamodb#DescribeContinuousBackups" - }, - { - "target": "com.amazonaws.dynamodb#DescribeContributorInsights" - }, - { - "target": "com.amazonaws.dynamodb#DescribeEndpoints" - }, - { - "target": "com.amazonaws.dynamodb#DescribeExport" - }, - { - "target": "com.amazonaws.dynamodb#DescribeGlobalTable" - }, - { - "target": "com.amazonaws.dynamodb#DescribeGlobalTableSettings" - }, - { - "target": "com.amazonaws.dynamodb#DescribeImport" - }, - { - "target": "com.amazonaws.dynamodb#DescribeKinesisStreamingDestination" - }, - { - "target": "com.amazonaws.dynamodb#DescribeLimits" - }, - { - "target": "com.amazonaws.dynamodb#DescribeTable" - }, - { - "target": "com.amazonaws.dynamodb#DescribeTableReplicaAutoScaling" - }, - { - "target": "com.amazonaws.dynamodb#DescribeTimeToLive" - }, - { - "target": "com.amazonaws.dynamodb#DisableKinesisStreamingDestination" - }, - { - "target": "com.amazonaws.dynamodb#EnableKinesisStreamingDestination" - }, - { - "target": "com.amazonaws.dynamodb#ExecuteStatement" - }, - { - "target": "com.amazonaws.dynamodb#ExecuteTransaction" - }, - { - "target": "com.amazonaws.dynamodb#ExportTableToPointInTime" - }, - { - "target": "com.amazonaws.dynamodb#GetItem" - }, - { - "target": "com.amazonaws.dynamodb#GetResourcePolicy" - }, - { - "target": "com.amazonaws.dynamodb#ImportTable" - }, - { - "target": "com.amazonaws.dynamodb#ListBackups" - }, - { - "target": "com.amazonaws.dynamodb#ListContributorInsights" - }, - { - "target": "com.amazonaws.dynamodb#ListExports" - }, - { - "target": "com.amazonaws.dynamodb#ListGlobalTables" - }, - { - "target": "com.amazonaws.dynamodb#ListImports" - }, - { - "target": "com.amazonaws.dynamodb#ListTables" - }, - { - "target": "com.amazonaws.dynamodb#ListTagsOfResource" - }, - { - "target": "com.amazonaws.dynamodb#PutItem" - }, - { - "target": "com.amazonaws.dynamodb#PutResourcePolicy" - }, - { - "target": "com.amazonaws.dynamodb#Query" - }, - { - "target": "com.amazonaws.dynamodb#RestoreTableFromBackup" - }, - { - "target": "com.amazonaws.dynamodb#RestoreTableToPointInTime" - }, - { - "target": "com.amazonaws.dynamodb#Scan" - }, - { - "target": "com.amazonaws.dynamodb#TagResource" - }, - { - "target": "com.amazonaws.dynamodb#TransactGetItems" - }, - { - "target": "com.amazonaws.dynamodb#TransactWriteItems" - }, - { - "target": "com.amazonaws.dynamodb#UntagResource" - }, - { - "target": "com.amazonaws.dynamodb#UpdateContinuousBackups" - }, - { - "target": "com.amazonaws.dynamodb#UpdateContributorInsights" - }, - { - "target": "com.amazonaws.dynamodb#UpdateGlobalTable" - }, - { - "target": "com.amazonaws.dynamodb#UpdateGlobalTableSettings" - }, - { - "target": "com.amazonaws.dynamodb#UpdateItem" - }, - { - "target": "com.amazonaws.dynamodb#UpdateKinesisStreamingDestination" - }, - { - "target": "com.amazonaws.dynamodb#UpdateTable" - }, - { - "target": "com.amazonaws.dynamodb#UpdateTableReplicaAutoScaling" - }, - { - "target": "com.amazonaws.dynamodb#UpdateTimeToLive" - } - ], - "traits": { - "aws.api#clientEndpointDiscovery": { - "operation": "com.amazonaws.dynamodb#DescribeEndpoints", - "error": "com.amazonaws.dynamodb#InvalidEndpointException" - }, - "aws.api#service": { - "sdkId": "DynamoDB", - "arnNamespace": "dynamodb", - "cloudFormationName": "DynamoDB", - "cloudTrailEventSource": "dynamodb.amazonaws.com", - "endpointPrefix": "dynamodb" - }, - "aws.auth#sigv4": { - "name": "dynamodb" - }, - "aws.protocols#awsJson1_0": {}, - "smithy.api#suppress": [ - "RuleSetAwsBuiltIn.AWS::Auth::AccountId" - ], - "smithy.api#title": "Amazon DynamoDB", - "smithy.api#xmlNamespace": { - "uri": "http://dynamodb.amazonaws.com/doc/2012-08-10/" - } - } - }, - "com.amazonaws.dynamodb#EnableKinesisStreamingConfiguration": { - "type": "structure", - "members": { - "ApproximateCreationDateTimePrecision": { - "target": "com.amazonaws.dynamodb#ApproximateCreationDateTimePrecision", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#EnableKinesisStreamingDestination": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#KinesisStreamingDestinationInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#KinesisStreamingDestinationOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#InvalidEndpointException" - }, - { - "target": "com.amazonaws.dynamodb#LimitExceededException" - }, - { - "target": "com.amazonaws.dynamodb#ResourceInUseException" - }, - { - "target": "com.amazonaws.dynamodb#ResourceNotFoundException" - } - ], - "traits": { - "aws.api#clientDiscoveredEndpoint": { - "required": false - } - } - }, - "com.amazonaws.dynamodb#Endpoint": { - "type": "structure", - "members": { - "Address": { - "target": "com.amazonaws.dynamodb#String", - "traits": { - "smithy.api#required": {} - } - }, - "CachePeriodInMinutes": { - "target": "com.amazonaws.dynamodb#Long", - "traits": { - "smithy.api#default": 0, - "smithy.api#required": {} - } - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#Endpoints": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#Endpoint" - } - }, - "com.amazonaws.dynamodb#ErrorCount": { - "type": "long", - "traits": { - "smithy.api#default": 0, - "smithy.api#range": { - "min": 0 - } - } - }, - "com.amazonaws.dynamodb#ErrorMessage": { - "type": "string" - }, - "com.amazonaws.dynamodb#ExceptionDescription": { - "type": "string" - }, - "com.amazonaws.dynamodb#ExceptionName": { - "type": "string" - }, - "com.amazonaws.dynamodb#ExecuteStatement": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#ExecuteStatementInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#ExecuteStatementOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#ConditionalCheckFailedException" - }, - { - "target": "com.amazonaws.dynamodb#DuplicateItemException" - }, - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#ItemCollectionSizeLimitExceededException" - }, - { - "target": "com.amazonaws.dynamodb#ProvisionedThroughputExceededException" - }, - { - "target": "com.amazonaws.dynamodb#RequestLimitExceeded" - }, - { - "target": "com.amazonaws.dynamodb#ResourceNotFoundException" - }, - { - "target": "com.amazonaws.dynamodb#TransactionConflictException" - } - ], - "traits": {} - }, - "com.amazonaws.dynamodb#ExecuteStatementInput": { - "type": "structure", - "members": { - "Statement": { - "target": "com.amazonaws.dynamodb#PartiQLStatement", - "traits": { - "smithy.api#required": {} - } - }, - "Parameters": { - "target": "com.amazonaws.dynamodb#PreparedStatementParameters", - "traits": {} - }, - "ConsistentRead": { - "target": "com.amazonaws.dynamodb#ConsistentRead", - "traits": {} - }, - "NextToken": { - "target": "com.amazonaws.dynamodb#PartiQLNextToken", - "traits": {} - }, - "ReturnConsumedCapacity": { - "target": "com.amazonaws.dynamodb#ReturnConsumedCapacity" - }, - "Limit": { - "target": "com.amazonaws.dynamodb#PositiveIntegerObject", - "traits": {} - }, - "ReturnValuesOnConditionCheckFailure": { - "target": "com.amazonaws.dynamodb#ReturnValuesOnConditionCheckFailure", - "traits": {} - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#ExecuteStatementOutput": { - "type": "structure", - "members": { - "Items": { - "target": "com.amazonaws.dynamodb#ItemList", - "traits": {} - }, - "NextToken": { - "target": "com.amazonaws.dynamodb#PartiQLNextToken", - "traits": {} - }, - "ConsumedCapacity": { - "target": "com.amazonaws.dynamodb#ConsumedCapacity" - }, - "LastEvaluatedKey": { - "target": "com.amazonaws.dynamodb#Key", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#ExecuteTransaction": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#ExecuteTransactionInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#ExecuteTransactionOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#IdempotentParameterMismatchException" - }, - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#ProvisionedThroughputExceededException" - }, - { - "target": "com.amazonaws.dynamodb#RequestLimitExceeded" - }, - { - "target": "com.amazonaws.dynamodb#ResourceNotFoundException" - }, - { - "target": "com.amazonaws.dynamodb#TransactionCanceledException" - }, - { - "target": "com.amazonaws.dynamodb#TransactionInProgressException" - } - ], - "traits": {} - }, - "com.amazonaws.dynamodb#ExecuteTransactionInput": { - "type": "structure", - "members": { - "TransactStatements": { - "target": "com.amazonaws.dynamodb#ParameterizedStatements", - "traits": { - "smithy.api#required": {} - } - }, - "ClientRequestToken": { - "target": "com.amazonaws.dynamodb#ClientRequestToken", - "traits": { - "smithy.api#idempotencyToken": {} - } - }, - "ReturnConsumedCapacity": { - "target": "com.amazonaws.dynamodb#ReturnConsumedCapacity", - "traits": {} - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#ExecuteTransactionOutput": { - "type": "structure", - "members": { - "Responses": { - "target": "com.amazonaws.dynamodb#ItemResponseList", - "traits": {} - }, - "ConsumedCapacity": { - "target": "com.amazonaws.dynamodb#ConsumedCapacityMultiple", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#ExpectedAttributeMap": { - "type": "map", - "key": { - "target": "com.amazonaws.dynamodb#AttributeName" - }, - "value": { - "target": "com.amazonaws.dynamodb#ExpectedAttributeValue" - } - }, - "com.amazonaws.dynamodb#ExpectedAttributeValue": { - "type": "structure", - "members": { - "Value": { - "target": "com.amazonaws.dynamodb#AttributeValue", - "traits": {} - }, - "Exists": { - "target": "com.amazonaws.dynamodb#BooleanObject", - "traits": {} - }, - "ComparisonOperator": { - "target": "com.amazonaws.dynamodb#ComparisonOperator", - "traits": {} - }, - "AttributeValueList": { - "target": "com.amazonaws.dynamodb#AttributeValueList", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#ExportArn": { - "type": "string", - "traits": { - "smithy.api#length": { - "min": 37, - "max": 1024 - } - } - }, - "com.amazonaws.dynamodb#ExportConflictException": { - "type": "structure", - "members": { - "message": { - "target": "com.amazonaws.dynamodb#ErrorMessage" - } - }, - "traits": { - "smithy.api#error": "client" - } - }, - "com.amazonaws.dynamodb#ExportDescription": { - "type": "structure", - "members": { - "ExportArn": { - "target": "com.amazonaws.dynamodb#ExportArn", - "traits": {} - }, - "ExportStatus": { - "target": "com.amazonaws.dynamodb#ExportStatus", - "traits": {} - }, - "StartTime": { - "target": "com.amazonaws.dynamodb#ExportStartTime", - "traits": {} - }, - "EndTime": { - "target": "com.amazonaws.dynamodb#ExportEndTime", - "traits": {} - }, - "ExportManifest": { - "target": "com.amazonaws.dynamodb#ExportManifest", - "traits": {} - }, - "TableArn": { - "target": "com.amazonaws.dynamodb#TableArn", - "traits": {} - }, - "TableId": { - "target": "com.amazonaws.dynamodb#TableId", - "traits": {} - }, - "ExportTime": { - "target": "com.amazonaws.dynamodb#ExportTime", - "traits": {} - }, - "ClientToken": { - "target": "com.amazonaws.dynamodb#ClientToken", - "traits": {} - }, - "S3Bucket": { - "target": "com.amazonaws.dynamodb#S3Bucket", - "traits": {} - }, - "S3BucketOwner": { - "target": "com.amazonaws.dynamodb#S3BucketOwner", - "traits": {} - }, - "S3Prefix": { - "target": "com.amazonaws.dynamodb#S3Prefix", - "traits": {} - }, - "S3SseAlgorithm": { - "target": "com.amazonaws.dynamodb#S3SseAlgorithm", - "traits": {} - }, - "S3SseKmsKeyId": { - "target": "com.amazonaws.dynamodb#S3SseKmsKeyId", - "traits": {} - }, - "FailureCode": { - "target": "com.amazonaws.dynamodb#FailureCode", - "traits": {} - }, - "FailureMessage": { - "target": "com.amazonaws.dynamodb#FailureMessage", - "traits": {} - }, - "ExportFormat": { - "target": "com.amazonaws.dynamodb#ExportFormat", - "traits": {} - }, - "BilledSizeBytes": { - "target": "com.amazonaws.dynamodb#BilledSizeBytes", - "traits": {} - }, - "ItemCount": { - "target": "com.amazonaws.dynamodb#ItemCount", - "traits": {} - }, - "ExportType": { - "target": "com.amazonaws.dynamodb#ExportType", - "traits": {} - }, - "IncrementalExportSpecification": { - "target": "com.amazonaws.dynamodb#IncrementalExportSpecification", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#ExportEndTime": { - "type": "timestamp" - }, - "com.amazonaws.dynamodb#ExportFormat": { - "type": "enum", - "members": { - "DYNAMODB_JSON": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "DYNAMODB_JSON" - } - }, - "ION": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "ION" - } - } - } - }, - "com.amazonaws.dynamodb#ExportFromTime": { - "type": "timestamp" - }, - "com.amazonaws.dynamodb#ExportManifest": { - "type": "string" - }, - "com.amazonaws.dynamodb#ExportNextToken": { - "type": "string" - }, - "com.amazonaws.dynamodb#ExportNotFoundException": { - "type": "structure", - "members": { - "message": { - "target": "com.amazonaws.dynamodb#ErrorMessage" - } - }, - "traits": { - "smithy.api#error": "client" - } - }, - "com.amazonaws.dynamodb#ExportStartTime": { - "type": "timestamp" - }, - "com.amazonaws.dynamodb#ExportStatus": { - "type": "enum", - "members": { - "IN_PROGRESS": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "IN_PROGRESS" - } - }, - "COMPLETED": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "COMPLETED" - } - }, - "FAILED": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "FAILED" - } - } - } - }, - "com.amazonaws.dynamodb#ExportSummaries": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#ExportSummary" - } - }, - "com.amazonaws.dynamodb#ExportSummary": { - "type": "structure", - "members": { - "ExportArn": { - "target": "com.amazonaws.dynamodb#ExportArn", - "traits": {} - }, - "ExportStatus": { - "target": "com.amazonaws.dynamodb#ExportStatus", - "traits": {} - }, - "ExportType": { - "target": "com.amazonaws.dynamodb#ExportType", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#ExportTableToPointInTime": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#ExportTableToPointInTimeInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#ExportTableToPointInTimeOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#ExportConflictException" - }, - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#InvalidExportTimeException" - }, - { - "target": "com.amazonaws.dynamodb#LimitExceededException" - }, - { - "target": "com.amazonaws.dynamodb#PointInTimeRecoveryUnavailableException" - }, - { - "target": "com.amazonaws.dynamodb#TableNotFoundException" - } - ], - "traits": {} - }, - "com.amazonaws.dynamodb#ExportTableToPointInTimeInput": { - "type": "structure", - "members": { - "TableArn": { - "target": "com.amazonaws.dynamodb#TableArn", - "traits": { - "smithy.api#required": {} - } - }, - "ExportTime": { - "target": "com.amazonaws.dynamodb#ExportTime", - "traits": {} - }, - "ClientToken": { - "target": "com.amazonaws.dynamodb#ClientToken", - "traits": { - "smithy.api#idempotencyToken": {} - } - }, - "S3Bucket": { - "target": "com.amazonaws.dynamodb#S3Bucket", - "traits": { - "smithy.api#required": {} - } - }, - "S3BucketOwner": { - "target": "com.amazonaws.dynamodb#S3BucketOwner", - "traits": {} - }, - "S3Prefix": { - "target": "com.amazonaws.dynamodb#S3Prefix", - "traits": {} - }, - "S3SseAlgorithm": { - "target": "com.amazonaws.dynamodb#S3SseAlgorithm", - "traits": {} - }, - "S3SseKmsKeyId": { - "target": "com.amazonaws.dynamodb#S3SseKmsKeyId", - "traits": {} - }, - "ExportFormat": { - "target": "com.amazonaws.dynamodb#ExportFormat", - "traits": {} - }, - "ExportType": { - "target": "com.amazonaws.dynamodb#ExportType", - "traits": {} - }, - "IncrementalExportSpecification": { - "target": "com.amazonaws.dynamodb#IncrementalExportSpecification", - "traits": {} - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#ExportTableToPointInTimeOutput": { - "type": "structure", - "members": { - "ExportDescription": { - "target": "com.amazonaws.dynamodb#ExportDescription", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#ExportTime": { - "type": "timestamp" - }, - "com.amazonaws.dynamodb#ExportToTime": { - "type": "timestamp" - }, - "com.amazonaws.dynamodb#ExportType": { - "type": "enum", - "members": { - "FULL_EXPORT": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "FULL_EXPORT" - } - }, - "INCREMENTAL_EXPORT": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "INCREMENTAL_EXPORT" - } - } - } - }, - "com.amazonaws.dynamodb#ExportViewType": { - "type": "enum", - "members": { - "NEW_IMAGE": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "NEW_IMAGE" - } - }, - "NEW_AND_OLD_IMAGES": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "NEW_AND_OLD_IMAGES" - } - } - } - }, - "com.amazonaws.dynamodb#ExpressionAttributeNameMap": { - "type": "map", - "key": { - "target": "com.amazonaws.dynamodb#ExpressionAttributeNameVariable" - }, - "value": { - "target": "com.amazonaws.dynamodb#AttributeName" - } - }, - "com.amazonaws.dynamodb#ExpressionAttributeNameVariable": { - "type": "string" - }, - "com.amazonaws.dynamodb#ExpressionAttributeValueMap": { - "type": "map", - "key": { - "target": "com.amazonaws.dynamodb#ExpressionAttributeValueVariable" - }, - "value": { - "target": "com.amazonaws.dynamodb#AttributeValue" - } - }, - "com.amazonaws.dynamodb#ExpressionAttributeValueVariable": { - "type": "string" - }, - "com.amazonaws.dynamodb#FailureCode": { - "type": "string" - }, - "com.amazonaws.dynamodb#FailureException": { - "type": "structure", - "members": { - "ExceptionName": { - "target": "com.amazonaws.dynamodb#ExceptionName", - "traits": {} - }, - "ExceptionDescription": { - "target": "com.amazonaws.dynamodb#ExceptionDescription", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#FailureMessage": { - "type": "string" - }, - "com.amazonaws.dynamodb#FilterConditionMap": { - "type": "map", - "key": { - "target": "com.amazonaws.dynamodb#AttributeName" - }, - "value": { - "target": "com.amazonaws.dynamodb#Condition" - } - }, - "com.amazonaws.dynamodb#Get": { - "type": "structure", - "members": { - "Key": { - "target": "com.amazonaws.dynamodb#Key", - "traits": { - "smithy.api#required": {} - } - }, - "TableName": { - "target": "com.amazonaws.dynamodb#TableArn", - "traits": { - "smithy.api#required": {} - } - }, - "ProjectionExpression": { - "target": "com.amazonaws.dynamodb#ProjectionExpression", - "traits": {} - }, - "ExpressionAttributeNames": { - "target": "com.amazonaws.dynamodb#ExpressionAttributeNameMap", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#GetItem": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#GetItemInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#GetItemOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#InvalidEndpointException" - }, - { - "target": "com.amazonaws.dynamodb#ProvisionedThroughputExceededException" - }, - { - "target": "com.amazonaws.dynamodb#RequestLimitExceeded" - }, - { - "target": "com.amazonaws.dynamodb#ResourceNotFoundException" - } - ], - "traits": { - "aws.api#clientDiscoveredEndpoint": { - "required": false - }, - "smithy.api#examples": [ - { - "title": "To read an item from a table", - "documentation": "This example retrieves an item from the Music table. The table has a partition key and a sort key (Artist and SongTitle), so you must specify both of these attributes.", - "input": { - "TableName": "Music", - "Key": { - "Artist": { - "S": "Acme Band" - }, - "SongTitle": { - "S": "Happy Day" - } - } - }, - "output": { - "Item": { - "AlbumTitle": { - "S": "Songs About Life" - }, - "SongTitle": { - "S": "Happy Day" - }, - "Artist": { - "S": "Acme Band" - } - } - } - } - ] - } - }, - "com.amazonaws.dynamodb#GetItemInput": { - "type": "structure", - "members": { - "TableName": { - "target": "com.amazonaws.dynamodb#TableArn", - "traits": { - "smithy.api#required": {} - } - }, - "Key": { - "target": "com.amazonaws.dynamodb#Key", - "traits": { - "smithy.api#required": {} - } - }, - "AttributesToGet": { - "target": "com.amazonaws.dynamodb#AttributeNameList", - "traits": {} - }, - "ConsistentRead": { - "target": "com.amazonaws.dynamodb#ConsistentRead", - "traits": {} - }, - "ReturnConsumedCapacity": { - "target": "com.amazonaws.dynamodb#ReturnConsumedCapacity" - }, - "ProjectionExpression": { - "target": "com.amazonaws.dynamodb#ProjectionExpression", - "traits": {} - }, - "ExpressionAttributeNames": { - "target": "com.amazonaws.dynamodb#ExpressionAttributeNameMap", - "traits": {} - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#GetItemOutput": { - "type": "structure", - "members": { - "Item": { - "target": "com.amazonaws.dynamodb#AttributeMap", - "traits": {} - }, - "ConsumedCapacity": { - "target": "com.amazonaws.dynamodb#ConsumedCapacity", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#GetResourcePolicy": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#GetResourcePolicyInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#GetResourcePolicyOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#InvalidEndpointException" - }, - { - "target": "com.amazonaws.dynamodb#PolicyNotFoundException" - }, - { - "target": "com.amazonaws.dynamodb#ResourceNotFoundException" - } - ], - "traits": { - "aws.api#clientDiscoveredEndpoint": { - "required": false - } - } - }, - "com.amazonaws.dynamodb#GetResourcePolicyInput": { - "type": "structure", - "members": { - "ResourceArn": { - "target": "com.amazonaws.dynamodb#ResourceArnString", - "traits": { - "smithy.api#required": {} - } - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#GetResourcePolicyOutput": { - "type": "structure", - "members": { - "Policy": { - "target": "com.amazonaws.dynamodb#ResourcePolicy", - "traits": {} - }, - "RevisionId": { - "target": "com.amazonaws.dynamodb#PolicyRevisionId", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#GlobalSecondaryIndex": { - "type": "structure", - "members": { - "IndexName": { - "target": "com.amazonaws.dynamodb#IndexName", - "traits": { - "smithy.api#required": {} - } - }, - "KeySchema": { - "target": "com.amazonaws.dynamodb#KeySchema", - "traits": { - "smithy.api#required": {} - } - }, - "Projection": { - "target": "com.amazonaws.dynamodb#Projection", - "traits": { - "smithy.api#required": {} - } - }, - "ProvisionedThroughput": { - "target": "com.amazonaws.dynamodb#ProvisionedThroughput", - "traits": {} - }, - "OnDemandThroughput": { - "target": "com.amazonaws.dynamodb#OnDemandThroughput", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#GlobalSecondaryIndexAutoScalingUpdate": { - "type": "structure", - "members": { - "IndexName": { - "target": "com.amazonaws.dynamodb#IndexName", - "traits": {} - }, - "ProvisionedWriteCapacityAutoScalingUpdate": { - "target": "com.amazonaws.dynamodb#AutoScalingSettingsUpdate" - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#GlobalSecondaryIndexAutoScalingUpdateList": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#GlobalSecondaryIndexAutoScalingUpdate" - }, - "traits": { - "smithy.api#length": { - "min": 1 - } - } - }, - "com.amazonaws.dynamodb#GlobalSecondaryIndexDescription": { - "type": "structure", - "members": { - "IndexName": { - "target": "com.amazonaws.dynamodb#IndexName", - "traits": {} - }, - "KeySchema": { - "target": "com.amazonaws.dynamodb#KeySchema", - "traits": {} - }, - "Projection": { - "target": "com.amazonaws.dynamodb#Projection", - "traits": {} - }, - "IndexStatus": { - "target": "com.amazonaws.dynamodb#IndexStatus", - "traits": {} - }, - "Backfilling": { - "target": "com.amazonaws.dynamodb#Backfilling", - "traits": {} - }, - "ProvisionedThroughput": { - "target": "com.amazonaws.dynamodb#ProvisionedThroughputDescription", - "traits": {} - }, - "IndexSizeBytes": { - "target": "com.amazonaws.dynamodb#LongObject", - "traits": {} - }, - "ItemCount": { - "target": "com.amazonaws.dynamodb#LongObject", - "traits": {} - }, - "IndexArn": { - "target": "com.amazonaws.dynamodb#String", - "traits": {} - }, - "OnDemandThroughput": { - "target": "com.amazonaws.dynamodb#OnDemandThroughput", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#GlobalSecondaryIndexDescriptionList": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#GlobalSecondaryIndexDescription" - } - }, - "com.amazonaws.dynamodb#GlobalSecondaryIndexInfo": { - "type": "structure", - "members": { - "IndexName": { - "target": "com.amazonaws.dynamodb#IndexName", - "traits": {} - }, - "KeySchema": { - "target": "com.amazonaws.dynamodb#KeySchema", - "traits": {} - }, - "Projection": { - "target": "com.amazonaws.dynamodb#Projection", - "traits": {} - }, - "ProvisionedThroughput": { - "target": "com.amazonaws.dynamodb#ProvisionedThroughput", - "traits": {} - }, - "OnDemandThroughput": { - "target": "com.amazonaws.dynamodb#OnDemandThroughput" - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#GlobalSecondaryIndexList": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#GlobalSecondaryIndex" - } - }, - "com.amazonaws.dynamodb#GlobalSecondaryIndexUpdate": { - "type": "structure", - "members": { - "Update": { - "target": "com.amazonaws.dynamodb#UpdateGlobalSecondaryIndexAction", - "traits": {} - }, - "Create": { - "target": "com.amazonaws.dynamodb#CreateGlobalSecondaryIndexAction", - "traits": {} - }, - "Delete": { - "target": "com.amazonaws.dynamodb#DeleteGlobalSecondaryIndexAction", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#GlobalSecondaryIndexUpdateList": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#GlobalSecondaryIndexUpdate" - } - }, - "com.amazonaws.dynamodb#GlobalSecondaryIndexes": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#GlobalSecondaryIndexInfo" - } - }, - "com.amazonaws.dynamodb#GlobalTable": { - "type": "structure", - "members": { - "GlobalTableName": { - "target": "com.amazonaws.dynamodb#TableName", - "traits": {} - }, - "ReplicationGroup": { - "target": "com.amazonaws.dynamodb#ReplicaList", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#GlobalTableAlreadyExistsException": { - "type": "structure", - "members": { - "message": { - "target": "com.amazonaws.dynamodb#ErrorMessage" - } - }, - "traits": { - "smithy.api#error": "client" - } - }, - "com.amazonaws.dynamodb#GlobalTableArnString": { - "type": "string" - }, - "com.amazonaws.dynamodb#GlobalTableDescription": { - "type": "structure", - "members": { - "ReplicationGroup": { - "target": "com.amazonaws.dynamodb#ReplicaDescriptionList", - "traits": {} - }, - "GlobalTableArn": { - "target": "com.amazonaws.dynamodb#GlobalTableArnString", - "traits": {} - }, - "CreationDateTime": { - "target": "com.amazonaws.dynamodb#Date", - "traits": {} - }, - "GlobalTableStatus": { - "target": "com.amazonaws.dynamodb#GlobalTableStatus", - "traits": {} - }, - "GlobalTableName": { - "target": "com.amazonaws.dynamodb#TableName", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#GlobalTableGlobalSecondaryIndexSettingsUpdate": { - "type": "structure", - "members": { - "IndexName": { - "target": "com.amazonaws.dynamodb#IndexName", - "traits": { - "smithy.api#required": {} - } - }, - "ProvisionedWriteCapacityUnits": { - "target": "com.amazonaws.dynamodb#PositiveLongObject", - "traits": {} - }, - "ProvisionedWriteCapacityAutoScalingSettingsUpdate": { - "target": "com.amazonaws.dynamodb#AutoScalingSettingsUpdate", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#GlobalTableGlobalSecondaryIndexSettingsUpdateList": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#GlobalTableGlobalSecondaryIndexSettingsUpdate" - }, - "traits": { - "smithy.api#length": { - "min": 1, - "max": 20 - } - } - }, - "com.amazonaws.dynamodb#GlobalTableList": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#GlobalTable" - } - }, - "com.amazonaws.dynamodb#GlobalTableNotFoundException": { - "type": "structure", - "members": { - "message": { - "target": "com.amazonaws.dynamodb#ErrorMessage" - } - }, - "traits": { - "smithy.api#error": "client" - } - }, - "com.amazonaws.dynamodb#GlobalTableStatus": { - "type": "enum", - "members": { - "CREATING": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "CREATING" - } - }, - "ACTIVE": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "ACTIVE" - } - }, - "DELETING": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "DELETING" - } - }, - "UPDATING": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "UPDATING" - } - } - } - }, - "com.amazonaws.dynamodb#IdempotentParameterMismatchException": { - "type": "structure", - "members": { - "Message": { - "target": "com.amazonaws.dynamodb#ErrorMessage" - } - }, - "traits": { - "smithy.api#error": "client" - } - }, - "com.amazonaws.dynamodb#ImportArn": { - "type": "string", - "traits": { - "smithy.api#length": { - "min": 37, - "max": 1024 - } - } - }, - "com.amazonaws.dynamodb#ImportConflictException": { - "type": "structure", - "members": { - "message": { - "target": "com.amazonaws.dynamodb#ErrorMessage" - } - }, - "traits": { - "smithy.api#error": "client" - } - }, - "com.amazonaws.dynamodb#ImportEndTime": { - "type": "timestamp" - }, - "com.amazonaws.dynamodb#ImportNextToken": { - "type": "string", - "traits": { - "smithy.api#length": { - "min": 112, - "max": 1024 - }, - "smithy.api#pattern": "^([0-9a-f]{16})+$" - } - }, - "com.amazonaws.dynamodb#ImportNotFoundException": { - "type": "structure", - "members": { - "message": { - "target": "com.amazonaws.dynamodb#ErrorMessage" - } - }, - "traits": { - "smithy.api#error": "client" - } - }, - "com.amazonaws.dynamodb#ImportStartTime": { - "type": "timestamp" - }, - "com.amazonaws.dynamodb#ImportStatus": { - "type": "enum", - "members": { - "IN_PROGRESS": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "IN_PROGRESS" - } - }, - "COMPLETED": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "COMPLETED" - } - }, - "CANCELLING": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "CANCELLING" - } - }, - "CANCELLED": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "CANCELLED" - } - }, - "FAILED": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "FAILED" - } - } - } - }, - "com.amazonaws.dynamodb#ImportSummary": { - "type": "structure", - "members": { - "ImportArn": { - "target": "com.amazonaws.dynamodb#ImportArn", - "traits": {} - }, - "ImportStatus": { - "target": "com.amazonaws.dynamodb#ImportStatus", - "traits": {} - }, - "TableArn": { - "target": "com.amazonaws.dynamodb#TableArn", - "traits": {} - }, - "S3BucketSource": { - "target": "com.amazonaws.dynamodb#S3BucketSource", - "traits": {} - }, - "CloudWatchLogGroupArn": { - "target": "com.amazonaws.dynamodb#CloudWatchLogGroupArn", - "traits": {} - }, - "InputFormat": { - "target": "com.amazonaws.dynamodb#InputFormat", - "traits": {} - }, - "StartTime": { - "target": "com.amazonaws.dynamodb#ImportStartTime", - "traits": {} - }, - "EndTime": { - "target": "com.amazonaws.dynamodb#ImportEndTime", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#ImportSummaryList": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#ImportSummary" - } - }, - "com.amazonaws.dynamodb#ImportTable": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#ImportTableInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#ImportTableOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#ImportConflictException" - }, - { - "target": "com.amazonaws.dynamodb#LimitExceededException" - }, - { - "target": "com.amazonaws.dynamodb#ResourceInUseException" - } - ], - "traits": {} - }, - "com.amazonaws.dynamodb#ImportTableDescription": { - "type": "structure", - "members": { - "ImportArn": { - "target": "com.amazonaws.dynamodb#ImportArn", - "traits": {} - }, - "ImportStatus": { - "target": "com.amazonaws.dynamodb#ImportStatus", - "traits": {} - }, - "TableArn": { - "target": "com.amazonaws.dynamodb#TableArn", - "traits": {} - }, - "TableId": { - "target": "com.amazonaws.dynamodb#TableId", - "traits": {} - }, - "ClientToken": { - "target": "com.amazonaws.dynamodb#ClientToken", - "traits": {} - }, - "S3BucketSource": { - "target": "com.amazonaws.dynamodb#S3BucketSource", - "traits": {} - }, - "ErrorCount": { - "target": "com.amazonaws.dynamodb#ErrorCount", - "traits": { - "smithy.api#default": 0 - } - }, - "CloudWatchLogGroupArn": { - "target": "com.amazonaws.dynamodb#CloudWatchLogGroupArn", - "traits": {} - }, - "InputFormat": { - "target": "com.amazonaws.dynamodb#InputFormat", - "traits": {} - }, - "InputFormatOptions": { - "target": "com.amazonaws.dynamodb#InputFormatOptions", - "traits": {} - }, - "InputCompressionType": { - "target": "com.amazonaws.dynamodb#InputCompressionType", - "traits": {} - }, - "TableCreationParameters": { - "target": "com.amazonaws.dynamodb#TableCreationParameters", - "traits": {} - }, - "StartTime": { - "target": "com.amazonaws.dynamodb#ImportStartTime", - "traits": {} - }, - "EndTime": { - "target": "com.amazonaws.dynamodb#ImportEndTime", - "traits": {} - }, - "ProcessedSizeBytes": { - "target": "com.amazonaws.dynamodb#LongObject", - "traits": {} - }, - "ProcessedItemCount": { - "target": "com.amazonaws.dynamodb#ProcessedItemCount", - "traits": { - "smithy.api#default": 0 - } - }, - "ImportedItemCount": { - "target": "com.amazonaws.dynamodb#ImportedItemCount", - "traits": { - "smithy.api#default": 0 - } - }, - "FailureCode": { - "target": "com.amazonaws.dynamodb#FailureCode", - "traits": {} - }, - "FailureMessage": { - "target": "com.amazonaws.dynamodb#FailureMessage", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#ImportTableInput": { - "type": "structure", - "members": { - "ClientToken": { - "target": "com.amazonaws.dynamodb#ClientToken", - "traits": { - "smithy.api#idempotencyToken": {} - } - }, - "S3BucketSource": { - "target": "com.amazonaws.dynamodb#S3BucketSource", - "traits": { - "smithy.api#required": {} - } - }, - "InputFormat": { - "target": "com.amazonaws.dynamodb#InputFormat", - "traits": { - "smithy.api#required": {} - } - }, - "InputFormatOptions": { - "target": "com.amazonaws.dynamodb#InputFormatOptions", - "traits": {} - }, - "InputCompressionType": { - "target": "com.amazonaws.dynamodb#InputCompressionType", - "traits": {} - }, - "TableCreationParameters": { - "target": "com.amazonaws.dynamodb#TableCreationParameters", - "traits": { - "smithy.api#required": {} - } - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#ImportTableOutput": { - "type": "structure", - "members": { - "ImportTableDescription": { - "target": "com.amazonaws.dynamodb#ImportTableDescription", - "traits": { - "smithy.api#required": {} - } - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#ImportedItemCount": { - "type": "long", - "traits": { - "smithy.api#default": 0, - "smithy.api#range": { - "min": 0 - } - } - }, - "com.amazonaws.dynamodb#IncrementalExportSpecification": { - "type": "structure", - "members": { - "ExportFromTime": { - "target": "com.amazonaws.dynamodb#ExportFromTime", - "traits": {} - }, - "ExportToTime": { - "target": "com.amazonaws.dynamodb#ExportToTime", - "traits": {} - }, - "ExportViewType": { - "target": "com.amazonaws.dynamodb#ExportViewType", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#IndexName": { - "type": "string", - "traits": { - "smithy.api#length": { - "min": 3, - "max": 255 - }, - "smithy.api#pattern": "^[a-zA-Z0-9_.-]+$" - } - }, - "com.amazonaws.dynamodb#IndexNotFoundException": { - "type": "structure", - "members": { - "message": { - "target": "com.amazonaws.dynamodb#ErrorMessage" - } - }, - "traits": { - "smithy.api#error": "client" - } - }, - "com.amazonaws.dynamodb#IndexStatus": { - "type": "enum", - "members": { - "CREATING": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "CREATING" - } - }, - "UPDATING": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "UPDATING" - } - }, - "DELETING": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "DELETING" - } - }, - "ACTIVE": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "ACTIVE" - } - } - } - }, - "com.amazonaws.dynamodb#InputCompressionType": { - "type": "enum", - "members": { - "GZIP": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "GZIP" - } - }, - "ZSTD": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "ZSTD" - } - }, - "NONE": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "NONE" - } - } - } - }, - "com.amazonaws.dynamodb#InputFormat": { - "type": "enum", - "members": { - "DYNAMODB_JSON": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "DYNAMODB_JSON" - } - }, - "ION": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "ION" - } - }, - "CSV": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "CSV" - } - } - } - }, - "com.amazonaws.dynamodb#InputFormatOptions": { - "type": "structure", - "members": { - "Csv": { - "target": "com.amazonaws.dynamodb#CsvOptions", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#Integer": { - "type": "integer", - "traits": { - "smithy.api#default": 0 - } - }, - "com.amazonaws.dynamodb#IntegerObject": { - "type": "integer" - }, - "com.amazonaws.dynamodb#InternalServerError": { - "type": "structure", - "members": { - "message": { - "target": "com.amazonaws.dynamodb#ErrorMessage", - "traits": {} - } - }, - "traits": { - "smithy.api#error": "server" - } - }, - "com.amazonaws.dynamodb#InvalidEndpointException": { - "type": "structure", - "members": { - "Message": { - "target": "com.amazonaws.dynamodb#String" - } - }, - "traits": { - "smithy.api#error": "client", - "smithy.api#httpError": 421 - } - }, - "com.amazonaws.dynamodb#InvalidExportTimeException": { - "type": "structure", - "members": { - "message": { - "target": "com.amazonaws.dynamodb#ErrorMessage" - } - }, - "traits": { - "smithy.api#error": "client" - } - }, - "com.amazonaws.dynamodb#InvalidRestoreTimeException": { - "type": "structure", - "members": { - "message": { - "target": "com.amazonaws.dynamodb#ErrorMessage" - } - }, - "traits": { - "smithy.api#error": "client" - } - }, - "com.amazonaws.dynamodb#ItemCollectionKeyAttributeMap": { - "type": "map", - "key": { - "target": "com.amazonaws.dynamodb#AttributeName" - }, - "value": { - "target": "com.amazonaws.dynamodb#AttributeValue" - } - }, - "com.amazonaws.dynamodb#ItemCollectionMetrics": { - "type": "structure", - "members": { - "ItemCollectionKey": { - "target": "com.amazonaws.dynamodb#ItemCollectionKeyAttributeMap", - "traits": {} - }, - "SizeEstimateRangeGB": { - "target": "com.amazonaws.dynamodb#ItemCollectionSizeEstimateRange", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#ItemCollectionMetricsMultiple": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#ItemCollectionMetrics" - } - }, - "com.amazonaws.dynamodb#ItemCollectionMetricsPerTable": { - "type": "map", - "key": { - "target": "com.amazonaws.dynamodb#TableArn" - }, - "value": { - "target": "com.amazonaws.dynamodb#ItemCollectionMetricsMultiple" - } - }, - "com.amazonaws.dynamodb#ItemCollectionSizeEstimateBound": { - "type": "double" - }, - "com.amazonaws.dynamodb#ItemCollectionSizeEstimateRange": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#ItemCollectionSizeEstimateBound" - } - }, - "com.amazonaws.dynamodb#ItemCollectionSizeLimitExceededException": { - "type": "structure", - "members": { - "message": { - "target": "com.amazonaws.dynamodb#ErrorMessage", - "traits": {} - } - }, - "traits": { - "smithy.api#error": "client" - } - }, - "com.amazonaws.dynamodb#ItemCount": { - "type": "long", - "traits": { - "smithy.api#range": { - "min": 0 - } - } - }, - "com.amazonaws.dynamodb#ItemList": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#AttributeMap" - } - }, - "com.amazonaws.dynamodb#ItemResponse": { - "type": "structure", - "members": { - "Item": { - "target": "com.amazonaws.dynamodb#AttributeMap", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#ItemResponseList": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#ItemResponse" - }, - "traits": { - "smithy.api#length": { - "min": 1, - "max": 100 - } - } - }, - "com.amazonaws.dynamodb#KMSMasterKeyArn": { - "type": "string" - }, - "com.amazonaws.dynamodb#KMSMasterKeyId": { - "type": "string" - }, - "com.amazonaws.dynamodb#Key": { - "type": "map", - "key": { - "target": "com.amazonaws.dynamodb#AttributeName" - }, - "value": { - "target": "com.amazonaws.dynamodb#AttributeValue" - } - }, - "com.amazonaws.dynamodb#KeyConditions": { - "type": "map", - "key": { - "target": "com.amazonaws.dynamodb#AttributeName" - }, - "value": { - "target": "com.amazonaws.dynamodb#Condition" - } - }, - "com.amazonaws.dynamodb#KeyExpression": { - "type": "string" - }, - "com.amazonaws.dynamodb#KeyList": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#Key" - }, - "traits": { - "smithy.api#length": { - "min": 1, - "max": 100 - } - } - }, - "com.amazonaws.dynamodb#KeySchema": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#KeySchemaElement" - }, - "traits": { - "smithy.api#length": { - "min": 1, - "max": 2 - } - } - }, - "com.amazonaws.dynamodb#KeySchemaAttributeName": { - "type": "string", - "traits": { - "smithy.api#length": { - "min": 1, - "max": 255 - } - } - }, - "com.amazonaws.dynamodb#KeySchemaElement": { - "type": "structure", - "members": { - "AttributeName": { - "target": "com.amazonaws.dynamodb#KeySchemaAttributeName", - "traits": { - "smithy.api#required": {} - } - }, - "KeyType": { - "target": "com.amazonaws.dynamodb#KeyType", - "traits": { - "smithy.api#required": {} - } - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#KeyType": { - "type": "enum", - "members": { - "HASH": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "HASH" - } - }, - "RANGE": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "RANGE" - } - } - } - }, - "com.amazonaws.dynamodb#KeysAndAttributes": { - "type": "structure", - "members": { - "Keys": { - "target": "com.amazonaws.dynamodb#KeyList", - "traits": { - "smithy.api#required": {} - } - }, - "AttributesToGet": { - "target": "com.amazonaws.dynamodb#AttributeNameList", - "traits": {} - }, - "ConsistentRead": { - "target": "com.amazonaws.dynamodb#ConsistentRead", - "traits": {} - }, - "ProjectionExpression": { - "target": "com.amazonaws.dynamodb#ProjectionExpression", - "traits": {} - }, - "ExpressionAttributeNames": { - "target": "com.amazonaws.dynamodb#ExpressionAttributeNameMap", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#KinesisDataStreamDestination": { - "type": "structure", - "members": { - "StreamArn": { - "target": "com.amazonaws.dynamodb#StreamArn", - "traits": {} - }, - "DestinationStatus": { - "target": "com.amazonaws.dynamodb#DestinationStatus", - "traits": {} - }, - "DestinationStatusDescription": { - "target": "com.amazonaws.dynamodb#String", - "traits": {} - }, - "ApproximateCreationDateTimePrecision": { - "target": "com.amazonaws.dynamodb#ApproximateCreationDateTimePrecision", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#KinesisDataStreamDestinations": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#KinesisDataStreamDestination" - } - }, - "com.amazonaws.dynamodb#KinesisStreamingDestinationInput": { - "type": "structure", - "members": { - "TableName": { - "target": "com.amazonaws.dynamodb#TableArn", - "traits": { - "smithy.api#required": {} - } - }, - "StreamArn": { - "target": "com.amazonaws.dynamodb#StreamArn", - "traits": { - "smithy.api#required": {} - } - }, - "EnableKinesisStreamingConfiguration": { - "target": "com.amazonaws.dynamodb#EnableKinesisStreamingConfiguration", - "traits": {} - } - } - }, - "com.amazonaws.dynamodb#KinesisStreamingDestinationOutput": { - "type": "structure", - "members": { - "TableName": { - "target": "com.amazonaws.dynamodb#TableName", - "traits": {} - }, - "StreamArn": { - "target": "com.amazonaws.dynamodb#StreamArn", - "traits": {} - }, - "DestinationStatus": { - "target": "com.amazonaws.dynamodb#DestinationStatus", - "traits": {} - }, - "EnableKinesisStreamingConfiguration": { - "target": "com.amazonaws.dynamodb#EnableKinesisStreamingConfiguration", - "traits": {} - } - } - }, - "com.amazonaws.dynamodb#LastUpdateDateTime": { - "type": "timestamp" - }, - "com.amazonaws.dynamodb#LimitExceededException": { - "type": "structure", - "members": { - "message": { - "target": "com.amazonaws.dynamodb#ErrorMessage", - "traits": {} - } - }, - "traits": { - "smithy.api#error": "client" - } - }, - "com.amazonaws.dynamodb#ListAttributeValue": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#AttributeValue" - } - }, - "com.amazonaws.dynamodb#ListBackups": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#ListBackupsInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#ListBackupsOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#InvalidEndpointException" - } - ], - "traits": { - "aws.api#clientDiscoveredEndpoint": { - "required": false - } - } - }, - "com.amazonaws.dynamodb#ListBackupsInput": { - "type": "structure", - "members": { - "TableName": { - "target": "com.amazonaws.dynamodb#TableArn", - "traits": {} - }, - "Limit": { - "target": "com.amazonaws.dynamodb#BackupsInputLimit", - "traits": {} - }, - "TimeRangeLowerBound": { - "target": "com.amazonaws.dynamodb#TimeRangeLowerBound", - "traits": {} - }, - "TimeRangeUpperBound": { - "target": "com.amazonaws.dynamodb#TimeRangeUpperBound", - "traits": {} - }, - "ExclusiveStartBackupArn": { - "target": "com.amazonaws.dynamodb#BackupArn", - "traits": {} - }, - "BackupType": { - "target": "com.amazonaws.dynamodb#BackupTypeFilter", - "traits": {} - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#ListBackupsOutput": { - "type": "structure", - "members": { - "BackupSummaries": { - "target": "com.amazonaws.dynamodb#BackupSummaries", - "traits": {} - }, - "LastEvaluatedBackupArn": { - "target": "com.amazonaws.dynamodb#BackupArn", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#ListContributorInsights": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#ListContributorInsightsInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#ListContributorInsightsOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#ResourceNotFoundException" - } - ], - "traits": { - "smithy.api#paginated": { - "inputToken": "NextToken", - "outputToken": "NextToken", - "pageSize": "MaxResults" - } - } - }, - "com.amazonaws.dynamodb#ListContributorInsightsInput": { - "type": "structure", - "members": { - "TableName": { - "target": "com.amazonaws.dynamodb#TableArn", - "traits": {} - }, - "NextToken": { - "target": "com.amazonaws.dynamodb#NextTokenString", - "traits": {} - }, - "MaxResults": { - "target": "com.amazonaws.dynamodb#ListContributorInsightsLimit", - "traits": { - "smithy.api#default": 0 - } - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#ListContributorInsightsLimit": { - "type": "integer", - "traits": { - "smithy.api#default": 0, - "smithy.api#range": { - "max": 100 - } - } - }, - "com.amazonaws.dynamodb#ListContributorInsightsOutput": { - "type": "structure", - "members": { - "ContributorInsightsSummaries": { - "target": "com.amazonaws.dynamodb#ContributorInsightsSummaries", - "traits": {} - }, - "NextToken": { - "target": "com.amazonaws.dynamodb#NextTokenString", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#ListExports": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#ListExportsInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#ListExportsOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#LimitExceededException" - } - ], - "traits": { - "smithy.api#paginated": { - "inputToken": "NextToken", - "outputToken": "NextToken", - "pageSize": "MaxResults" - } - } - }, - "com.amazonaws.dynamodb#ListExportsInput": { - "type": "structure", - "members": { - "TableArn": { - "target": "com.amazonaws.dynamodb#TableArn", - "traits": {} - }, - "MaxResults": { - "target": "com.amazonaws.dynamodb#ListExportsMaxLimit", - "traits": {} - }, - "NextToken": { - "target": "com.amazonaws.dynamodb#ExportNextToken", - "traits": {} - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#ListExportsMaxLimit": { - "type": "integer", - "traits": { - "smithy.api#range": { - "min": 1, - "max": 25 - } - } - }, - "com.amazonaws.dynamodb#ListExportsOutput": { - "type": "structure", - "members": { - "ExportSummaries": { - "target": "com.amazonaws.dynamodb#ExportSummaries", - "traits": {} - }, - "NextToken": { - "target": "com.amazonaws.dynamodb#ExportNextToken", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#ListGlobalTables": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#ListGlobalTablesInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#ListGlobalTablesOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#InvalidEndpointException" - } - ], - "traits": { - "aws.api#clientDiscoveredEndpoint": { - "required": false - } - } - }, - "com.amazonaws.dynamodb#ListGlobalTablesInput": { - "type": "structure", - "members": { - "ExclusiveStartGlobalTableName": { - "target": "com.amazonaws.dynamodb#TableName", - "traits": {} - }, - "Limit": { - "target": "com.amazonaws.dynamodb#PositiveIntegerObject", - "traits": {} - }, - "RegionName": { - "target": "com.amazonaws.dynamodb#RegionName", - "traits": {} - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#ListGlobalTablesOutput": { - "type": "structure", - "members": { - "GlobalTables": { - "target": "com.amazonaws.dynamodb#GlobalTableList", - "traits": {} - }, - "LastEvaluatedGlobalTableName": { - "target": "com.amazonaws.dynamodb#TableName", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#ListImports": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#ListImportsInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#ListImportsOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#LimitExceededException" - } - ], - "traits": { - "smithy.api#paginated": { - "inputToken": "NextToken", - "outputToken": "NextToken", - "pageSize": "PageSize" - } - } - }, - "com.amazonaws.dynamodb#ListImportsInput": { - "type": "structure", - "members": { - "TableArn": { - "target": "com.amazonaws.dynamodb#TableArn", - "traits": {} - }, - "PageSize": { - "target": "com.amazonaws.dynamodb#ListImportsMaxLimit", - "traits": {} - }, - "NextToken": { - "target": "com.amazonaws.dynamodb#ImportNextToken", - "traits": {} - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#ListImportsMaxLimit": { - "type": "integer", - "traits": { - "smithy.api#range": { - "min": 1, - "max": 25 - } - } - }, - "com.amazonaws.dynamodb#ListImportsOutput": { - "type": "structure", - "members": { - "ImportSummaryList": { - "target": "com.amazonaws.dynamodb#ImportSummaryList", - "traits": {} - }, - "NextToken": { - "target": "com.amazonaws.dynamodb#ImportNextToken", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#ListTables": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#ListTablesInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#ListTablesOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#InvalidEndpointException" - } - ], - "traits": { - "aws.api#clientDiscoveredEndpoint": { - "required": false - }, - "smithy.api#examples": [ - { - "title": "To list tables", - "documentation": "This example lists all of the tables associated with the current AWS account and endpoint.", - "output": { - "TableNames": [ - "Forum", - "ProductCatalog", - "Reply", - "Thread" - ] - } - } - ], - "smithy.api#paginated": { - "inputToken": "ExclusiveStartTableName", - "outputToken": "LastEvaluatedTableName", - "items": "TableNames", - "pageSize": "Limit" - } - } - }, - "com.amazonaws.dynamodb#ListTablesInput": { - "type": "structure", - "members": { - "ExclusiveStartTableName": { - "target": "com.amazonaws.dynamodb#TableName", - "traits": {} - }, - "Limit": { - "target": "com.amazonaws.dynamodb#ListTablesInputLimit", - "traits": {} - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#ListTablesInputLimit": { - "type": "integer", - "traits": { - "smithy.api#range": { - "min": 1, - "max": 100 - } - } - }, - "com.amazonaws.dynamodb#ListTablesOutput": { - "type": "structure", - "members": { - "TableNames": { - "target": "com.amazonaws.dynamodb#TableNameList", - "traits": {} - }, - "LastEvaluatedTableName": { - "target": "com.amazonaws.dynamodb#TableName", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#ListTagsOfResource": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#ListTagsOfResourceInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#ListTagsOfResourceOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#InvalidEndpointException" - }, - { - "target": "com.amazonaws.dynamodb#ResourceNotFoundException" - } - ], - "traits": { - "aws.api#clientDiscoveredEndpoint": { - "required": false - } - } - }, - "com.amazonaws.dynamodb#ListTagsOfResourceInput": { - "type": "structure", - "members": { - "ResourceArn": { - "target": "com.amazonaws.dynamodb#ResourceArnString", - "traits": { - "smithy.api#required": {} - } - }, - "NextToken": { - "target": "com.amazonaws.dynamodb#NextTokenString", - "traits": {} - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#ListTagsOfResourceOutput": { - "type": "structure", - "members": { - "Tags": { - "target": "com.amazonaws.dynamodb#TagList", - "traits": {} - }, - "NextToken": { - "target": "com.amazonaws.dynamodb#NextTokenString", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#LocalSecondaryIndex": { - "type": "structure", - "members": { - "IndexName": { - "target": "com.amazonaws.dynamodb#IndexName", - "traits": { - "smithy.api#required": {} - } - }, - "KeySchema": { - "target": "com.amazonaws.dynamodb#KeySchema", - "traits": { - "smithy.api#required": {} - } - }, - "Projection": { - "target": "com.amazonaws.dynamodb#Projection", - "traits": { - "smithy.api#required": {} - } - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#LocalSecondaryIndexDescription": { - "type": "structure", - "members": { - "IndexName": { - "target": "com.amazonaws.dynamodb#IndexName", - "traits": {} - }, - "KeySchema": { - "target": "com.amazonaws.dynamodb#KeySchema", - "traits": {} - }, - "Projection": { - "target": "com.amazonaws.dynamodb#Projection", - "traits": {} - }, - "IndexSizeBytes": { - "target": "com.amazonaws.dynamodb#LongObject", - "traits": {} - }, - "ItemCount": { - "target": "com.amazonaws.dynamodb#LongObject", - "traits": {} - }, - "IndexArn": { - "target": "com.amazonaws.dynamodb#String", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#LocalSecondaryIndexDescriptionList": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#LocalSecondaryIndexDescription" - } - }, - "com.amazonaws.dynamodb#LocalSecondaryIndexInfo": { - "type": "structure", - "members": { - "IndexName": { - "target": "com.amazonaws.dynamodb#IndexName", - "traits": {} - }, - "KeySchema": { - "target": "com.amazonaws.dynamodb#KeySchema", - "traits": {} - }, - "Projection": { - "target": "com.amazonaws.dynamodb#Projection", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#LocalSecondaryIndexList": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#LocalSecondaryIndex" - } - }, - "com.amazonaws.dynamodb#LocalSecondaryIndexes": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#LocalSecondaryIndexInfo" - } - }, - "com.amazonaws.dynamodb#Long": { - "type": "long", - "traits": { - "smithy.api#default": 0 - } - }, - "com.amazonaws.dynamodb#LongObject": { - "type": "long" - }, - "com.amazonaws.dynamodb#MapAttributeValue": { - "type": "map", - "key": { - "target": "com.amazonaws.dynamodb#AttributeName" - }, - "value": { - "target": "com.amazonaws.dynamodb#AttributeValue" - } - }, - "com.amazonaws.dynamodb#NextTokenString": { - "type": "string" - }, - "com.amazonaws.dynamodb#NonKeyAttributeName": { - "type": "string", - "traits": { - "smithy.api#length": { - "min": 1, - "max": 255 - } - } - }, - "com.amazonaws.dynamodb#NonKeyAttributeNameList": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#NonKeyAttributeName" - }, - "traits": { - "smithy.api#length": { - "min": 1, - "max": 20 - } - } - }, - "com.amazonaws.dynamodb#NonNegativeLongObject": { - "type": "long", - "traits": { - "smithy.api#range": { - "min": 0 - } - } - }, - "com.amazonaws.dynamodb#NullAttributeValue": { - "type": "boolean" - }, - "com.amazonaws.dynamodb#NumberAttributeValue": { - "type": "string" - }, - "com.amazonaws.dynamodb#NumberSetAttributeValue": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#NumberAttributeValue" - } - }, - "com.amazonaws.dynamodb#OnDemandThroughput": { - "type": "structure", - "members": { - "MaxReadRequestUnits": { - "target": "com.amazonaws.dynamodb#LongObject", - "traits": {} - }, - "MaxWriteRequestUnits": { - "target": "com.amazonaws.dynamodb#LongObject", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#OnDemandThroughputOverride": { - "type": "structure", - "members": { - "MaxReadRequestUnits": { - "target": "com.amazonaws.dynamodb#LongObject", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#ParameterizedStatement": { - "type": "structure", - "members": { - "Statement": { - "target": "com.amazonaws.dynamodb#PartiQLStatement", - "traits": { - "smithy.api#required": {} - } - }, - "Parameters": { - "target": "com.amazonaws.dynamodb#PreparedStatementParameters", - "traits": {} - }, - "ReturnValuesOnConditionCheckFailure": { - "target": "com.amazonaws.dynamodb#ReturnValuesOnConditionCheckFailure", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#ParameterizedStatements": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#ParameterizedStatement" - }, - "traits": { - "smithy.api#length": { - "min": 1, - "max": 100 - } - } - }, - "com.amazonaws.dynamodb#PartiQLBatchRequest": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#BatchStatementRequest" - }, - "traits": { - "smithy.api#length": { - "min": 1, - "max": 25 - } - } - }, - "com.amazonaws.dynamodb#PartiQLBatchResponse": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#BatchStatementResponse" - } - }, - "com.amazonaws.dynamodb#PartiQLNextToken": { - "type": "string", - "traits": { - "smithy.api#length": { - "min": 1, - "max": 32768 - } - } - }, - "com.amazonaws.dynamodb#PartiQLStatement": { - "type": "string", - "traits": { - "smithy.api#length": { - "min": 1, - "max": 8192 - } - } - }, - "com.amazonaws.dynamodb#PointInTimeRecoveryDescription": { - "type": "structure", - "members": { - "PointInTimeRecoveryStatus": { - "target": "com.amazonaws.dynamodb#PointInTimeRecoveryStatus", - "traits": {} - }, - "EarliestRestorableDateTime": { - "target": "com.amazonaws.dynamodb#Date", - "traits": {} - }, - "LatestRestorableDateTime": { - "target": "com.amazonaws.dynamodb#Date", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#PointInTimeRecoverySpecification": { - "type": "structure", - "members": { - "PointInTimeRecoveryEnabled": { - "target": "com.amazonaws.dynamodb#BooleanObject", - "traits": { - "smithy.api#required": {} - } - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#PointInTimeRecoveryStatus": { - "type": "enum", - "members": { - "ENABLED": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "ENABLED" - } - }, - "DISABLED": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "DISABLED" - } - } - } - }, - "com.amazonaws.dynamodb#PointInTimeRecoveryUnavailableException": { - "type": "structure", - "members": { - "message": { - "target": "com.amazonaws.dynamodb#ErrorMessage" - } - }, - "traits": { - "smithy.api#error": "client" - } - }, - "com.amazonaws.dynamodb#PolicyNotFoundException": { - "type": "structure", - "members": { - "message": { - "target": "com.amazonaws.dynamodb#ErrorMessage" - } - }, - "traits": { - "smithy.api#error": "client" - } - }, - "com.amazonaws.dynamodb#PolicyRevisionId": { - "type": "string", - "traits": { - "smithy.api#length": { - "min": 1, - "max": 255 - } - } - }, - "com.amazonaws.dynamodb#PositiveIntegerObject": { - "type": "integer", - "traits": { - "smithy.api#range": { - "min": 1 - } - } - }, - "com.amazonaws.dynamodb#PositiveLongObject": { - "type": "long", - "traits": { - "smithy.api#range": { - "min": 1 - } - } - }, - "com.amazonaws.dynamodb#PreparedStatementParameters": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#AttributeValue" - }, - "traits": { - "smithy.api#length": { - "min": 1 - } - } - }, - "com.amazonaws.dynamodb#ProcessedItemCount": { - "type": "long", - "traits": { - "smithy.api#default": 0, - "smithy.api#range": { - "min": 0 - } - } - }, - "com.amazonaws.dynamodb#Projection": { - "type": "structure", - "members": { - "ProjectionType": { - "target": "com.amazonaws.dynamodb#ProjectionType", - "traits": {} - }, - "NonKeyAttributes": { - "target": "com.amazonaws.dynamodb#NonKeyAttributeNameList", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#ProjectionExpression": { - "type": "string" - }, - "com.amazonaws.dynamodb#ProjectionType": { - "type": "enum", - "members": { - "ALL": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "ALL" - } - }, - "KEYS_ONLY": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "KEYS_ONLY" - } - }, - "INCLUDE": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "INCLUDE" - } - } - } - }, - "com.amazonaws.dynamodb#ProvisionedThroughput": { - "type": "structure", - "members": { - "ReadCapacityUnits": { - "target": "com.amazonaws.dynamodb#PositiveLongObject", - "traits": { - "smithy.api#required": {} - } - }, - "WriteCapacityUnits": { - "target": "com.amazonaws.dynamodb#PositiveLongObject", - "traits": { - "smithy.api#required": {} - } - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#ProvisionedThroughputDescription": { - "type": "structure", - "members": { - "LastIncreaseDateTime": { - "target": "com.amazonaws.dynamodb#Date", - "traits": {} - }, - "LastDecreaseDateTime": { - "target": "com.amazonaws.dynamodb#Date", - "traits": {} - }, - "NumberOfDecreasesToday": { - "target": "com.amazonaws.dynamodb#PositiveLongObject", - "traits": {} - }, - "ReadCapacityUnits": { - "target": "com.amazonaws.dynamodb#NonNegativeLongObject", - "traits": {} - }, - "WriteCapacityUnits": { - "target": "com.amazonaws.dynamodb#NonNegativeLongObject", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#ProvisionedThroughputExceededException": { - "type": "structure", - "members": { - "message": { - "target": "com.amazonaws.dynamodb#ErrorMessage", - "traits": {} - } - }, - "traits": { - "smithy.api#error": "client" - } - }, - "com.amazonaws.dynamodb#ProvisionedThroughputOverride": { - "type": "structure", - "members": { - "ReadCapacityUnits": { - "target": "com.amazonaws.dynamodb#PositiveLongObject", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#Put": { - "type": "structure", - "members": { - "Item": { - "target": "com.amazonaws.dynamodb#PutItemInputAttributeMap", - "traits": { - "smithy.api#required": {} - } - }, - "TableName": { - "target": "com.amazonaws.dynamodb#TableArn", - "traits": { - "smithy.api#required": {} - } - }, - "ConditionExpression": { - "target": "com.amazonaws.dynamodb#ConditionExpression", - "traits": {} - }, - "ExpressionAttributeNames": { - "target": "com.amazonaws.dynamodb#ExpressionAttributeNameMap", - "traits": {} - }, - "ExpressionAttributeValues": { - "target": "com.amazonaws.dynamodb#ExpressionAttributeValueMap", - "traits": {} - }, - "ReturnValuesOnConditionCheckFailure": { - "target": "com.amazonaws.dynamodb#ReturnValuesOnConditionCheckFailure", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#PutItem": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#PutItemInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#PutItemOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#ConditionalCheckFailedException" - }, - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#InvalidEndpointException" - }, - { - "target": "com.amazonaws.dynamodb#ItemCollectionSizeLimitExceededException" - }, - { - "target": "com.amazonaws.dynamodb#ProvisionedThroughputExceededException" - }, - { - "target": "com.amazonaws.dynamodb#RequestLimitExceeded" - }, - { - "target": "com.amazonaws.dynamodb#ResourceNotFoundException" - }, - { - "target": "com.amazonaws.dynamodb#TransactionConflictException" - } - ], - "traits": { - "aws.api#clientDiscoveredEndpoint": { - "required": false - }, - "smithy.api#examples": [ - { - "title": "To add an item to a table", - "documentation": "This example adds a new item to the Music table.", - "input": { - "TableName": "Music", - "Item": { - "AlbumTitle": { - "S": "Somewhat Famous" - }, - "SongTitle": { - "S": "Call Me Today" - }, - "Artist": { - "S": "No One You Know" - } - }, - "ReturnConsumedCapacity": "TOTAL" - }, - "output": { - "ConsumedCapacity": { - "CapacityUnits": 1, - "TableName": "Music" - } - } - } - ] - } - }, - "com.amazonaws.dynamodb#PutItemInput": { - "type": "structure", - "members": { - "TableName": { - "target": "com.amazonaws.dynamodb#TableArn", - "traits": { - "smithy.api#required": {} - } - }, - "Item": { - "target": "com.amazonaws.dynamodb#PutItemInputAttributeMap", - "traits": { - "smithy.api#required": {} - } - }, - "Expected": { - "target": "com.amazonaws.dynamodb#ExpectedAttributeMap", - "traits": {} - }, - "ReturnValues": { - "target": "com.amazonaws.dynamodb#ReturnValue", - "traits": {} - }, - "ReturnConsumedCapacity": { - "target": "com.amazonaws.dynamodb#ReturnConsumedCapacity" - }, - "ReturnItemCollectionMetrics": { - "target": "com.amazonaws.dynamodb#ReturnItemCollectionMetrics", - "traits": {} - }, - "ConditionalOperator": { - "target": "com.amazonaws.dynamodb#ConditionalOperator", - "traits": {} - }, - "ConditionExpression": { - "target": "com.amazonaws.dynamodb#ConditionExpression", - "traits": {} - }, - "ExpressionAttributeNames": { - "target": "com.amazonaws.dynamodb#ExpressionAttributeNameMap", - "traits": {} - }, - "ExpressionAttributeValues": { - "target": "com.amazonaws.dynamodb#ExpressionAttributeValueMap", - "traits": {} - }, - "ReturnValuesOnConditionCheckFailure": { - "target": "com.amazonaws.dynamodb#ReturnValuesOnConditionCheckFailure", - "traits": {} - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#PutItemInputAttributeMap": { - "type": "map", - "key": { - "target": "com.amazonaws.dynamodb#AttributeName" - }, - "value": { - "target": "com.amazonaws.dynamodb#AttributeValue" - } - }, - "com.amazonaws.dynamodb#PutItemOutput": { - "type": "structure", - "members": { - "Attributes": { - "target": "com.amazonaws.dynamodb#AttributeMap", - "traits": {} - }, - "ConsumedCapacity": { - "target": "com.amazonaws.dynamodb#ConsumedCapacity", - "traits": {} - }, - "ItemCollectionMetrics": { - "target": "com.amazonaws.dynamodb#ItemCollectionMetrics", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#PutRequest": { - "type": "structure", - "members": { - "Item": { - "target": "com.amazonaws.dynamodb#PutItemInputAttributeMap", - "traits": { - "smithy.api#required": {} - } - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#PutResourcePolicy": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#PutResourcePolicyInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#PutResourcePolicyOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#InvalidEndpointException" - }, - { - "target": "com.amazonaws.dynamodb#LimitExceededException" - }, - { - "target": "com.amazonaws.dynamodb#PolicyNotFoundException" - }, - { - "target": "com.amazonaws.dynamodb#ResourceInUseException" - }, - { - "target": "com.amazonaws.dynamodb#ResourceNotFoundException" - } - ], - "traits": { - "aws.api#clientDiscoveredEndpoint": { - "required": false - } - } - }, - "com.amazonaws.dynamodb#PutResourcePolicyInput": { - "type": "structure", - "members": { - "ResourceArn": { - "target": "com.amazonaws.dynamodb#ResourceArnString", - "traits": { - "smithy.api#required": {} - } - }, - "Policy": { - "target": "com.amazonaws.dynamodb#ResourcePolicy", - "traits": { - "smithy.api#required": {} - } - }, - "ExpectedRevisionId": { - "target": "com.amazonaws.dynamodb#PolicyRevisionId", - "traits": {} - }, - "ConfirmRemoveSelfResourceAccess": { - "target": "com.amazonaws.dynamodb#ConfirmRemoveSelfResourceAccess", - "traits": { - "smithy.api#default": false, - "smithy.api#httpHeader": "x-amz-confirm-remove-self-resource-access" - } - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#PutResourcePolicyOutput": { - "type": "structure", - "members": { - "RevisionId": { - "target": "com.amazonaws.dynamodb#PolicyRevisionId", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#Query": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#QueryInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#QueryOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#InvalidEndpointException" - }, - { - "target": "com.amazonaws.dynamodb#ProvisionedThroughputExceededException" - }, - { - "target": "com.amazonaws.dynamodb#RequestLimitExceeded" - }, - { - "target": "com.amazonaws.dynamodb#ResourceNotFoundException" - } - ], - "traits": { - "aws.api#clientDiscoveredEndpoint": { - "required": false - }, - "smithy.api#examples": [ - { - "title": "To query an item", - "documentation": "This example queries items in the Music table. The table has a partition key and sort key (Artist and SongTitle), but this query only specifies the partition key value. It returns song titles by the artist named \"No One You Know\".", - "input": { - "TableName": "Music", - "ProjectionExpression": "SongTitle", - "KeyConditionExpression": "Artist = :v1", - "ExpressionAttributeValues": { - ":v1": { - "S": "No One You Know" - } - } - }, - "output": { - "Count": 2, - "Items": [ - { - "SongTitle": { - "S": "Call Me Today" - } - } - ], - "ScannedCount": 2, - "ConsumedCapacity": {} - } - } - ], - "smithy.api#paginated": { - "inputToken": "ExclusiveStartKey", - "outputToken": "LastEvaluatedKey", - "items": "Items", - "pageSize": "Limit" - }, - "smithy.api#suppress": [ - "PaginatedTrait" - ] - } - }, - "com.amazonaws.dynamodb#QueryInput": { - "type": "structure", - "members": { - "TableName": { - "target": "com.amazonaws.dynamodb#TableArn", - "traits": { - "smithy.api#required": {} - } - }, - "IndexName": { - "target": "com.amazonaws.dynamodb#IndexName", - "traits": {} - }, - "Select": { - "target": "com.amazonaws.dynamodb#Select", - "traits": {} - }, - "AttributesToGet": { - "target": "com.amazonaws.dynamodb#AttributeNameList", - "traits": {} - }, - "Limit": { - "target": "com.amazonaws.dynamodb#PositiveIntegerObject", - "traits": {} - }, - "ConsistentRead": { - "target": "com.amazonaws.dynamodb#ConsistentRead", - "traits": {} - }, - "KeyConditions": { - "target": "com.amazonaws.dynamodb#KeyConditions", - "traits": {} - }, - "QueryFilter": { - "target": "com.amazonaws.dynamodb#FilterConditionMap", - "traits": {} - }, - "ConditionalOperator": { - "target": "com.amazonaws.dynamodb#ConditionalOperator", - "traits": {} - }, - "ScanIndexForward": { - "target": "com.amazonaws.dynamodb#BooleanObject", - "traits": {} - }, - "ExclusiveStartKey": { - "target": "com.amazonaws.dynamodb#Key", - "traits": {} - }, - "ReturnConsumedCapacity": { - "target": "com.amazonaws.dynamodb#ReturnConsumedCapacity" - }, - "ProjectionExpression": { - "target": "com.amazonaws.dynamodb#ProjectionExpression", - "traits": {} - }, - "FilterExpression": { - "target": "com.amazonaws.dynamodb#ConditionExpression", - "traits": {} - }, - "KeyConditionExpression": { - "target": "com.amazonaws.dynamodb#KeyExpression", - "traits": {} - }, - "ExpressionAttributeNames": { - "target": "com.amazonaws.dynamodb#ExpressionAttributeNameMap", - "traits": {} - }, - "ExpressionAttributeValues": { - "target": "com.amazonaws.dynamodb#ExpressionAttributeValueMap", - "traits": {} - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#QueryOutput": { - "type": "structure", - "members": { - "Items": { - "target": "com.amazonaws.dynamodb#ItemList", - "traits": {} - }, - "Count": { - "target": "com.amazonaws.dynamodb#Integer", - "traits": { - "smithy.api#default": 0 - } - }, - "ScannedCount": { - "target": "com.amazonaws.dynamodb#Integer", - "traits": { - "smithy.api#default": 0 - } - }, - "LastEvaluatedKey": { - "target": "com.amazonaws.dynamodb#Key", - "traits": {} - }, - "ConsumedCapacity": { - "target": "com.amazonaws.dynamodb#ConsumedCapacity", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#RegionName": { - "type": "string" - }, - "com.amazonaws.dynamodb#Replica": { - "type": "structure", - "members": { - "RegionName": { - "target": "com.amazonaws.dynamodb#RegionName", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#ReplicaAlreadyExistsException": { - "type": "structure", - "members": { - "message": { - "target": "com.amazonaws.dynamodb#ErrorMessage" - } - }, - "traits": { - "smithy.api#error": "client" - } - }, - "com.amazonaws.dynamodb#ReplicaAutoScalingDescription": { - "type": "structure", - "members": { - "RegionName": { - "target": "com.amazonaws.dynamodb#RegionName", - "traits": {} - }, - "GlobalSecondaryIndexes": { - "target": "com.amazonaws.dynamodb#ReplicaGlobalSecondaryIndexAutoScalingDescriptionList", - "traits": {} - }, - "ReplicaProvisionedReadCapacityAutoScalingSettings": { - "target": "com.amazonaws.dynamodb#AutoScalingSettingsDescription" - }, - "ReplicaProvisionedWriteCapacityAutoScalingSettings": { - "target": "com.amazonaws.dynamodb#AutoScalingSettingsDescription" - }, - "ReplicaStatus": { - "target": "com.amazonaws.dynamodb#ReplicaStatus", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#ReplicaAutoScalingDescriptionList": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#ReplicaAutoScalingDescription" - } - }, - "com.amazonaws.dynamodb#ReplicaAutoScalingUpdate": { - "type": "structure", - "members": { - "RegionName": { - "target": "com.amazonaws.dynamodb#RegionName", - "traits": { - "smithy.api#required": {} - } - }, - "ReplicaGlobalSecondaryIndexUpdates": { - "target": "com.amazonaws.dynamodb#ReplicaGlobalSecondaryIndexAutoScalingUpdateList", - "traits": {} - }, - "ReplicaProvisionedReadCapacityAutoScalingUpdate": { - "target": "com.amazonaws.dynamodb#AutoScalingSettingsUpdate" - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#ReplicaAutoScalingUpdateList": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#ReplicaAutoScalingUpdate" - }, - "traits": { - "smithy.api#length": { - "min": 1 - } - } - }, - "com.amazonaws.dynamodb#ReplicaDescription": { - "type": "structure", - "members": { - "RegionName": { - "target": "com.amazonaws.dynamodb#RegionName", - "traits": {} - }, - "ReplicaStatus": { - "target": "com.amazonaws.dynamodb#ReplicaStatus", - "traits": {} - }, - "ReplicaStatusDescription": { - "target": "com.amazonaws.dynamodb#ReplicaStatusDescription", - "traits": {} - }, - "ReplicaStatusPercentProgress": { - "target": "com.amazonaws.dynamodb#ReplicaStatusPercentProgress", - "traits": {} - }, - "KMSMasterKeyId": { - "target": "com.amazonaws.dynamodb#KMSMasterKeyId", - "traits": {} - }, - "ProvisionedThroughputOverride": { - "target": "com.amazonaws.dynamodb#ProvisionedThroughputOverride", - "traits": {} - }, - "OnDemandThroughputOverride": { - "target": "com.amazonaws.dynamodb#OnDemandThroughputOverride", - "traits": {} - }, - "GlobalSecondaryIndexes": { - "target": "com.amazonaws.dynamodb#ReplicaGlobalSecondaryIndexDescriptionList", - "traits": {} - }, - "ReplicaInaccessibleDateTime": { - "target": "com.amazonaws.dynamodb#Date", - "traits": {} - }, - "ReplicaTableClassSummary": { - "target": "com.amazonaws.dynamodb#TableClassSummary" - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#ReplicaDescriptionList": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#ReplicaDescription" - } - }, - "com.amazonaws.dynamodb#ReplicaGlobalSecondaryIndex": { - "type": "structure", - "members": { - "IndexName": { - "target": "com.amazonaws.dynamodb#IndexName", - "traits": { - "smithy.api#required": {} - } - }, - "ProvisionedThroughputOverride": { - "target": "com.amazonaws.dynamodb#ProvisionedThroughputOverride", - "traits": {} - }, - "OnDemandThroughputOverride": { - "target": "com.amazonaws.dynamodb#OnDemandThroughputOverride", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#ReplicaGlobalSecondaryIndexAutoScalingDescription": { - "type": "structure", - "members": { - "IndexName": { - "target": "com.amazonaws.dynamodb#IndexName", - "traits": {} - }, - "IndexStatus": { - "target": "com.amazonaws.dynamodb#IndexStatus", - "traits": {} - }, - "ProvisionedReadCapacityAutoScalingSettings": { - "target": "com.amazonaws.dynamodb#AutoScalingSettingsDescription" - }, - "ProvisionedWriteCapacityAutoScalingSettings": { - "target": "com.amazonaws.dynamodb#AutoScalingSettingsDescription" - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#ReplicaGlobalSecondaryIndexAutoScalingDescriptionList": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#ReplicaGlobalSecondaryIndexAutoScalingDescription" - } - }, - "com.amazonaws.dynamodb#ReplicaGlobalSecondaryIndexAutoScalingUpdate": { - "type": "structure", - "members": { - "IndexName": { - "target": "com.amazonaws.dynamodb#IndexName", - "traits": {} - }, - "ProvisionedReadCapacityAutoScalingUpdate": { - "target": "com.amazonaws.dynamodb#AutoScalingSettingsUpdate" - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#ReplicaGlobalSecondaryIndexAutoScalingUpdateList": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#ReplicaGlobalSecondaryIndexAutoScalingUpdate" - } - }, - "com.amazonaws.dynamodb#ReplicaGlobalSecondaryIndexDescription": { - "type": "structure", - "members": { - "IndexName": { - "target": "com.amazonaws.dynamodb#IndexName", - "traits": {} - }, - "ProvisionedThroughputOverride": { - "target": "com.amazonaws.dynamodb#ProvisionedThroughputOverride", - "traits": {} - }, - "OnDemandThroughputOverride": { - "target": "com.amazonaws.dynamodb#OnDemandThroughputOverride", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#ReplicaGlobalSecondaryIndexDescriptionList": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#ReplicaGlobalSecondaryIndexDescription" - } - }, - "com.amazonaws.dynamodb#ReplicaGlobalSecondaryIndexList": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#ReplicaGlobalSecondaryIndex" - }, - "traits": { - "smithy.api#length": { - "min": 1 - } - } - }, - "com.amazonaws.dynamodb#ReplicaGlobalSecondaryIndexSettingsDescription": { - "type": "structure", - "members": { - "IndexName": { - "target": "com.amazonaws.dynamodb#IndexName", - "traits": { - "smithy.api#required": {} - } - }, - "IndexStatus": { - "target": "com.amazonaws.dynamodb#IndexStatus", - "traits": {} - }, - "ProvisionedReadCapacityUnits": { - "target": "com.amazonaws.dynamodb#PositiveLongObject", - "traits": {} - }, - "ProvisionedReadCapacityAutoScalingSettings": { - "target": "com.amazonaws.dynamodb#AutoScalingSettingsDescription", - "traits": {} - }, - "ProvisionedWriteCapacityUnits": { - "target": "com.amazonaws.dynamodb#PositiveLongObject", - "traits": {} - }, - "ProvisionedWriteCapacityAutoScalingSettings": { - "target": "com.amazonaws.dynamodb#AutoScalingSettingsDescription", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#ReplicaGlobalSecondaryIndexSettingsDescriptionList": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#ReplicaGlobalSecondaryIndexSettingsDescription" - } - }, - "com.amazonaws.dynamodb#ReplicaGlobalSecondaryIndexSettingsUpdate": { - "type": "structure", - "members": { - "IndexName": { - "target": "com.amazonaws.dynamodb#IndexName", - "traits": { - "smithy.api#required": {} - } - }, - "ProvisionedReadCapacityUnits": { - "target": "com.amazonaws.dynamodb#PositiveLongObject", - "traits": {} - }, - "ProvisionedReadCapacityAutoScalingSettingsUpdate": { - "target": "com.amazonaws.dynamodb#AutoScalingSettingsUpdate", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#ReplicaGlobalSecondaryIndexSettingsUpdateList": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#ReplicaGlobalSecondaryIndexSettingsUpdate" - }, - "traits": { - "smithy.api#length": { - "min": 1, - "max": 20 - } - } - }, - "com.amazonaws.dynamodb#ReplicaList": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#Replica" - } - }, - "com.amazonaws.dynamodb#ReplicaNotFoundException": { - "type": "structure", - "members": { - "message": { - "target": "com.amazonaws.dynamodb#ErrorMessage" - } - }, - "traits": { - "smithy.api#error": "client" - } - }, - "com.amazonaws.dynamodb#ReplicaSettingsDescription": { - "type": "structure", - "members": { - "RegionName": { - "target": "com.amazonaws.dynamodb#RegionName", - "traits": { - "smithy.api#required": {} - } - }, - "ReplicaStatus": { - "target": "com.amazonaws.dynamodb#ReplicaStatus", - "traits": {} - }, - "ReplicaBillingModeSummary": { - "target": "com.amazonaws.dynamodb#BillingModeSummary", - "traits": {} - }, - "ReplicaProvisionedReadCapacityUnits": { - "target": "com.amazonaws.dynamodb#NonNegativeLongObject", - "traits": {} - }, - "ReplicaProvisionedReadCapacityAutoScalingSettings": { - "target": "com.amazonaws.dynamodb#AutoScalingSettingsDescription", - "traits": {} - }, - "ReplicaProvisionedWriteCapacityUnits": { - "target": "com.amazonaws.dynamodb#NonNegativeLongObject", - "traits": {} - }, - "ReplicaProvisionedWriteCapacityAutoScalingSettings": { - "target": "com.amazonaws.dynamodb#AutoScalingSettingsDescription", - "traits": {} - }, - "ReplicaGlobalSecondaryIndexSettings": { - "target": "com.amazonaws.dynamodb#ReplicaGlobalSecondaryIndexSettingsDescriptionList", - "traits": {} - }, - "ReplicaTableClassSummary": { - "target": "com.amazonaws.dynamodb#TableClassSummary" - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#ReplicaSettingsDescriptionList": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#ReplicaSettingsDescription" - } - }, - "com.amazonaws.dynamodb#ReplicaSettingsUpdate": { - "type": "structure", - "members": { - "RegionName": { - "target": "com.amazonaws.dynamodb#RegionName", - "traits": { - "smithy.api#required": {} - } - }, - "ReplicaProvisionedReadCapacityUnits": { - "target": "com.amazonaws.dynamodb#PositiveLongObject", - "traits": {} - }, - "ReplicaProvisionedReadCapacityAutoScalingSettingsUpdate": { - "target": "com.amazonaws.dynamodb#AutoScalingSettingsUpdate", - "traits": {} - }, - "ReplicaGlobalSecondaryIndexSettingsUpdate": { - "target": "com.amazonaws.dynamodb#ReplicaGlobalSecondaryIndexSettingsUpdateList", - "traits": {} - }, - "ReplicaTableClass": { - "target": "com.amazonaws.dynamodb#TableClass", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#ReplicaSettingsUpdateList": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#ReplicaSettingsUpdate" - }, - "traits": { - "smithy.api#length": { - "min": 1, - "max": 50 - } - } - }, - "com.amazonaws.dynamodb#ReplicaStatus": { - "type": "enum", - "members": { - "CREATING": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "CREATING" - } - }, - "CREATION_FAILED": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "CREATION_FAILED" - } - }, - "UPDATING": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "UPDATING" - } - }, - "DELETING": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "DELETING" - } - }, - "ACTIVE": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "ACTIVE" - } - }, - "REGION_DISABLED": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "REGION_DISABLED" - } - }, - "INACCESSIBLE_ENCRYPTION_CREDENTIALS": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "INACCESSIBLE_ENCRYPTION_CREDENTIALS" - } - } - } - }, - "com.amazonaws.dynamodb#ReplicaStatusDescription": { - "type": "string" - }, - "com.amazonaws.dynamodb#ReplicaStatusPercentProgress": { - "type": "string" - }, - "com.amazonaws.dynamodb#ReplicaUpdate": { - "type": "structure", - "members": { - "Create": { - "target": "com.amazonaws.dynamodb#CreateReplicaAction", - "traits": {} - }, - "Delete": { - "target": "com.amazonaws.dynamodb#DeleteReplicaAction", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#ReplicaUpdateList": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#ReplicaUpdate" - } - }, - "com.amazonaws.dynamodb#ReplicationGroupUpdate": { - "type": "structure", - "members": { - "Create": { - "target": "com.amazonaws.dynamodb#CreateReplicationGroupMemberAction", - "traits": {} - }, - "Update": { - "target": "com.amazonaws.dynamodb#UpdateReplicationGroupMemberAction", - "traits": {} - }, - "Delete": { - "target": "com.amazonaws.dynamodb#DeleteReplicationGroupMemberAction", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#ReplicationGroupUpdateList": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#ReplicationGroupUpdate" - }, - "traits": { - "smithy.api#length": { - "min": 1 - } - } - }, - "com.amazonaws.dynamodb#RequestLimitExceeded": { - "type": "structure", - "members": { - "message": { - "target": "com.amazonaws.dynamodb#ErrorMessage" - } - }, - "traits": { - "smithy.api#error": "client" - } - }, - "com.amazonaws.dynamodb#ResourceArnString": { - "type": "string", - "traits": { - "smithy.api#length": { - "min": 1, - "max": 1283 - } - } - }, - "com.amazonaws.dynamodb#ResourceInUseException": { - "type": "structure", - "members": { - "message": { - "target": "com.amazonaws.dynamodb#ErrorMessage", - "traits": {} - } - }, - "traits": { - "smithy.api#error": "client" - } - }, - "com.amazonaws.dynamodb#ResourceNotFoundException": { - "type": "structure", - "members": { - "message": { - "target": "com.amazonaws.dynamodb#ErrorMessage", - "traits": {} - } - }, - "traits": { - "smithy.api#error": "client" - } - }, - "com.amazonaws.dynamodb#ResourcePolicy": { - "type": "string" - }, - "com.amazonaws.dynamodb#RestoreInProgress": { - "type": "boolean" - }, - "com.amazonaws.dynamodb#RestoreSummary": { - "type": "structure", - "members": { - "SourceBackupArn": { - "target": "com.amazonaws.dynamodb#BackupArn", - "traits": {} - }, - "SourceTableArn": { - "target": "com.amazonaws.dynamodb#TableArn", - "traits": {} - }, - "RestoreDateTime": { - "target": "com.amazonaws.dynamodb#Date", - "traits": { - "smithy.api#required": {} - } - }, - "RestoreInProgress": { - "target": "com.amazonaws.dynamodb#RestoreInProgress", - "traits": { - "smithy.api#required": {} - } - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#RestoreTableFromBackup": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#RestoreTableFromBackupInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#RestoreTableFromBackupOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#BackupInUseException" - }, - { - "target": "com.amazonaws.dynamodb#BackupNotFoundException" - }, - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#InvalidEndpointException" - }, - { - "target": "com.amazonaws.dynamodb#LimitExceededException" - }, - { - "target": "com.amazonaws.dynamodb#TableAlreadyExistsException" - }, - { - "target": "com.amazonaws.dynamodb#TableInUseException" - } - ], - "traits": { - "aws.api#clientDiscoveredEndpoint": { - "required": false - } - } - }, - "com.amazonaws.dynamodb#RestoreTableFromBackupInput": { - "type": "structure", - "members": { - "TargetTableName": { - "target": "com.amazonaws.dynamodb#TableName", - "traits": { - "smithy.api#required": {} - } - }, - "BackupArn": { - "target": "com.amazonaws.dynamodb#BackupArn", - "traits": { - "smithy.api#required": {} - } - }, - "BillingModeOverride": { - "target": "com.amazonaws.dynamodb#BillingMode", - "traits": {} - }, - "GlobalSecondaryIndexOverride": { - "target": "com.amazonaws.dynamodb#GlobalSecondaryIndexList", - "traits": {} - }, - "LocalSecondaryIndexOverride": { - "target": "com.amazonaws.dynamodb#LocalSecondaryIndexList", - "traits": {} - }, - "ProvisionedThroughputOverride": { - "target": "com.amazonaws.dynamodb#ProvisionedThroughput", - "traits": {} - }, - "OnDemandThroughputOverride": { - "target": "com.amazonaws.dynamodb#OnDemandThroughput" - }, - "SSESpecificationOverride": { - "target": "com.amazonaws.dynamodb#SSESpecification", - "traits": {} - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#RestoreTableFromBackupOutput": { - "type": "structure", - "members": { - "TableDescription": { - "target": "com.amazonaws.dynamodb#TableDescription", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#RestoreTableToPointInTime": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#RestoreTableToPointInTimeInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#RestoreTableToPointInTimeOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#InvalidEndpointException" - }, - { - "target": "com.amazonaws.dynamodb#InvalidRestoreTimeException" - }, - { - "target": "com.amazonaws.dynamodb#LimitExceededException" - }, - { - "target": "com.amazonaws.dynamodb#PointInTimeRecoveryUnavailableException" - }, - { - "target": "com.amazonaws.dynamodb#TableAlreadyExistsException" - }, - { - "target": "com.amazonaws.dynamodb#TableInUseException" - }, - { - "target": "com.amazonaws.dynamodb#TableNotFoundException" - } - ], - "traits": { - "aws.api#clientDiscoveredEndpoint": { - "required": false - } - } - }, - "com.amazonaws.dynamodb#RestoreTableToPointInTimeInput": { - "type": "structure", - "members": { - "SourceTableArn": { - "target": "com.amazonaws.dynamodb#TableArn", - "traits": {} - }, - "SourceTableName": { - "target": "com.amazonaws.dynamodb#TableName", - "traits": {} - }, - "TargetTableName": { - "target": "com.amazonaws.dynamodb#TableName", - "traits": { - "smithy.api#required": {} - } - }, - "UseLatestRestorableTime": { - "target": "com.amazonaws.dynamodb#BooleanObject", - "traits": {} - }, - "RestoreDateTime": { - "target": "com.amazonaws.dynamodb#Date", - "traits": {} - }, - "BillingModeOverride": { - "target": "com.amazonaws.dynamodb#BillingMode", - "traits": {} - }, - "GlobalSecondaryIndexOverride": { - "target": "com.amazonaws.dynamodb#GlobalSecondaryIndexList", - "traits": {} - }, - "LocalSecondaryIndexOverride": { - "target": "com.amazonaws.dynamodb#LocalSecondaryIndexList", - "traits": {} - }, - "ProvisionedThroughputOverride": { - "target": "com.amazonaws.dynamodb#ProvisionedThroughput", - "traits": {} - }, - "OnDemandThroughputOverride": { - "target": "com.amazonaws.dynamodb#OnDemandThroughput" - }, - "SSESpecificationOverride": { - "target": "com.amazonaws.dynamodb#SSESpecification", - "traits": {} - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#RestoreTableToPointInTimeOutput": { - "type": "structure", - "members": { - "TableDescription": { - "target": "com.amazonaws.dynamodb#TableDescription", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#ReturnConsumedCapacity": { - "type": "enum", - "members": { - "INDEXES": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "INDEXES" - } - }, - "TOTAL": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "TOTAL" - } - }, - "NONE": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "NONE" - } - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#ReturnItemCollectionMetrics": { - "type": "enum", - "members": { - "SIZE": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "SIZE" - } - }, - "NONE": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "NONE" - } - } - } - }, - "com.amazonaws.dynamodb#ReturnValue": { - "type": "enum", - "members": { - "NONE": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "NONE" - } - }, - "ALL_OLD": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "ALL_OLD" - } - }, - "UPDATED_OLD": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "UPDATED_OLD" - } - }, - "ALL_NEW": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "ALL_NEW" - } - }, - "UPDATED_NEW": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "UPDATED_NEW" - } - } - } - }, - "com.amazonaws.dynamodb#ReturnValuesOnConditionCheckFailure": { - "type": "enum", - "members": { - "ALL_OLD": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "ALL_OLD" - } - }, - "NONE": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "NONE" - } - } - } - }, - "com.amazonaws.dynamodb#S3Bucket": { - "type": "string", - "traits": { - "smithy.api#length": { - "min": 0, - "max": 255 - }, - "smithy.api#pattern": "^[a-z0-9A-Z]+[\\.\\-\\w]*[a-z0-9A-Z]+$" - } - }, - "com.amazonaws.dynamodb#S3BucketOwner": { - "type": "string", - "traits": { - "smithy.api#pattern": "^[0-9]{12}$" - } - }, - "com.amazonaws.dynamodb#S3BucketSource": { - "type": "structure", - "members": { - "S3BucketOwner": { - "target": "com.amazonaws.dynamodb#S3BucketOwner", - "traits": {} - }, - "S3Bucket": { - "target": "com.amazonaws.dynamodb#S3Bucket", - "traits": { - "smithy.api#required": {} - } - }, - "S3KeyPrefix": { - "target": "com.amazonaws.dynamodb#S3Prefix", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#S3Prefix": { - "type": "string", - "traits": { - "smithy.api#length": { - "min": 0, - "max": 1024 - } - } - }, - "com.amazonaws.dynamodb#S3SseAlgorithm": { - "type": "enum", - "members": { - "AES256": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "AES256" - } - }, - "KMS": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "KMS" - } - } - } - }, - "com.amazonaws.dynamodb#S3SseKmsKeyId": { - "type": "string", - "traits": { - "smithy.api#length": { - "min": 1, - "max": 2048 - } - } - }, - "com.amazonaws.dynamodb#SSEDescription": { - "type": "structure", - "members": { - "Status": { - "target": "com.amazonaws.dynamodb#SSEStatus", - "traits": {} - }, - "SSEType": { - "target": "com.amazonaws.dynamodb#SSEType", - "traits": {} - }, - "KMSMasterKeyArn": { - "target": "com.amazonaws.dynamodb#KMSMasterKeyArn", - "traits": {} - }, - "InaccessibleEncryptionDateTime": { - "target": "com.amazonaws.dynamodb#Date", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#SSEEnabled": { - "type": "boolean" - }, - "com.amazonaws.dynamodb#SSESpecification": { - "type": "structure", - "members": { - "Enabled": { - "target": "com.amazonaws.dynamodb#SSEEnabled", - "traits": {} - }, - "SSEType": { - "target": "com.amazonaws.dynamodb#SSEType", - "traits": {} - }, - "KMSMasterKeyId": { - "target": "com.amazonaws.dynamodb#KMSMasterKeyId", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#SSEStatus": { - "type": "enum", - "members": { - "ENABLING": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "ENABLING" - } - }, - "ENABLED": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "ENABLED" - } - }, - "DISABLING": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "DISABLING" - } - }, - "DISABLED": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "DISABLED" - } - }, - "UPDATING": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "UPDATING" - } - } - } - }, - "com.amazonaws.dynamodb#SSEType": { - "type": "enum", - "members": { - "AES256": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "AES256" - } - }, - "KMS": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "KMS" - } - } - } - }, - "com.amazonaws.dynamodb#ScalarAttributeType": { - "type": "enum", - "members": { - "S": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "S" - } - }, - "N": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "N" - } - }, - "B": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "B" - } - } - } - }, - "com.amazonaws.dynamodb#Scan": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#ScanInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#ScanOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#InvalidEndpointException" - }, - { - "target": "com.amazonaws.dynamodb#ProvisionedThroughputExceededException" - }, - { - "target": "com.amazonaws.dynamodb#RequestLimitExceeded" - }, - { - "target": "com.amazonaws.dynamodb#ResourceNotFoundException" - } - ], - "traits": { - "aws.api#clientDiscoveredEndpoint": { - "required": false - }, - "smithy.api#examples": [ - { - "title": "To scan a table", - "documentation": "This example scans the entire Music table, and then narrows the results to songs by the artist \"No One You Know\". For each item, only the album title and song title are returned.", - "input": { - "TableName": "Music", - "FilterExpression": "Artist = :a", - "ProjectionExpression": "#ST, #AT", - "ExpressionAttributeNames": { - "#ST": "SongTitle", - "#AT": "AlbumTitle" - }, - "ExpressionAttributeValues": { - ":a": { - "S": "No One You Know" - } - } - }, - "output": { - "Count": 2, - "Items": [ - { - "SongTitle": { - "S": "Call Me Today" - }, - "AlbumTitle": { - "S": "Somewhat Famous" - } - }, - { - "SongTitle": { - "S": "Scared of My Shadow" - }, - "AlbumTitle": { - "S": "Blue Sky Blues" - } - } - ], - "ScannedCount": 3, - "ConsumedCapacity": {} - } - } - ], - "smithy.api#paginated": { - "inputToken": "ExclusiveStartKey", - "outputToken": "LastEvaluatedKey", - "items": "Items", - "pageSize": "Limit" - }, - "smithy.api#suppress": [ - "PaginatedTrait" - ] - } - }, - "com.amazonaws.dynamodb#ScanInput": { - "type": "structure", - "members": { - "TableName": { - "target": "com.amazonaws.dynamodb#TableArn", - "traits": { - "smithy.api#required": {} - } - }, - "IndexName": { - "target": "com.amazonaws.dynamodb#IndexName", - "traits": {} - }, - "AttributesToGet": { - "target": "com.amazonaws.dynamodb#AttributeNameList", - "traits": {} - }, - "Limit": { - "target": "com.amazonaws.dynamodb#PositiveIntegerObject", - "traits": {} - }, - "Select": { - "target": "com.amazonaws.dynamodb#Select", - "traits": {} - }, - "ScanFilter": { - "target": "com.amazonaws.dynamodb#FilterConditionMap", - "traits": {} - }, - "ConditionalOperator": { - "target": "com.amazonaws.dynamodb#ConditionalOperator", - "traits": {} - }, - "ExclusiveStartKey": { - "target": "com.amazonaws.dynamodb#Key", - "traits": {} - }, - "ReturnConsumedCapacity": { - "target": "com.amazonaws.dynamodb#ReturnConsumedCapacity" - }, - "TotalSegments": { - "target": "com.amazonaws.dynamodb#ScanTotalSegments", - "traits": {} - }, - "Segment": { - "target": "com.amazonaws.dynamodb#ScanSegment", - "traits": {} - }, - "ProjectionExpression": { - "target": "com.amazonaws.dynamodb#ProjectionExpression", - "traits": {} - }, - "FilterExpression": { - "target": "com.amazonaws.dynamodb#ConditionExpression", - "traits": {} - }, - "ExpressionAttributeNames": { - "target": "com.amazonaws.dynamodb#ExpressionAttributeNameMap", - "traits": {} - }, - "ExpressionAttributeValues": { - "target": "com.amazonaws.dynamodb#ExpressionAttributeValueMap", - "traits": {} - }, - "ConsistentRead": { - "target": "com.amazonaws.dynamodb#ConsistentRead", - "traits": {} - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#ScanOutput": { - "type": "structure", - "members": { - "Items": { - "target": "com.amazonaws.dynamodb#ItemList", - "traits": {} - }, - "Count": { - "target": "com.amazonaws.dynamodb#Integer", - "traits": { - "smithy.api#default": 0 - } - }, - "ScannedCount": { - "target": "com.amazonaws.dynamodb#Integer", - "traits": { - "smithy.api#default": 0 - } - }, - "LastEvaluatedKey": { - "target": "com.amazonaws.dynamodb#Key", - "traits": {} - }, - "ConsumedCapacity": { - "target": "com.amazonaws.dynamodb#ConsumedCapacity", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#ScanSegment": { - "type": "integer", - "traits": { - "smithy.api#range": { - "min": 0, - "max": 999999 - } - } - }, - "com.amazonaws.dynamodb#ScanTotalSegments": { - "type": "integer", - "traits": { - "smithy.api#range": { - "min": 1, - "max": 1000000 - } - } - }, - "com.amazonaws.dynamodb#SecondaryIndexesCapacityMap": { - "type": "map", - "key": { - "target": "com.amazonaws.dynamodb#IndexName" - }, - "value": { - "target": "com.amazonaws.dynamodb#Capacity" - } - }, - "com.amazonaws.dynamodb#Select": { - "type": "enum", - "members": { - "ALL_ATTRIBUTES": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "ALL_ATTRIBUTES" - } - }, - "ALL_PROJECTED_ATTRIBUTES": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "ALL_PROJECTED_ATTRIBUTES" - } - }, - "SPECIFIC_ATTRIBUTES": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "SPECIFIC_ATTRIBUTES" - } - }, - "COUNT": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "COUNT" - } - } - } - }, - "com.amazonaws.dynamodb#SourceTableDetails": { - "type": "structure", - "members": { - "TableName": { - "target": "com.amazonaws.dynamodb#TableName", - "traits": { - "smithy.api#required": {} - } - }, - "TableId": { - "target": "com.amazonaws.dynamodb#TableId", - "traits": { - "smithy.api#required": {} - } - }, - "TableArn": { - "target": "com.amazonaws.dynamodb#TableArn", - "traits": {} - }, - "TableSizeBytes": { - "target": "com.amazonaws.dynamodb#LongObject", - "traits": {} - }, - "KeySchema": { - "target": "com.amazonaws.dynamodb#KeySchema", - "traits": { - "smithy.api#required": {} - } - }, - "TableCreationDateTime": { - "target": "com.amazonaws.dynamodb#TableCreationDateTime", - "traits": { - "smithy.api#required": {} - } - }, - "ProvisionedThroughput": { - "target": "com.amazonaws.dynamodb#ProvisionedThroughput", - "traits": { - "smithy.api#required": {} - } - }, - "OnDemandThroughput": { - "target": "com.amazonaws.dynamodb#OnDemandThroughput" - }, - "ItemCount": { - "target": "com.amazonaws.dynamodb#ItemCount", - "traits": {} - }, - "BillingMode": { - "target": "com.amazonaws.dynamodb#BillingMode", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#SourceTableFeatureDetails": { - "type": "structure", - "members": { - "LocalSecondaryIndexes": { - "target": "com.amazonaws.dynamodb#LocalSecondaryIndexes", - "traits": {} - }, - "GlobalSecondaryIndexes": { - "target": "com.amazonaws.dynamodb#GlobalSecondaryIndexes", - "traits": {} - }, - "StreamDescription": { - "target": "com.amazonaws.dynamodb#StreamSpecification", - "traits": {} - }, - "TimeToLiveDescription": { - "target": "com.amazonaws.dynamodb#TimeToLiveDescription", - "traits": {} - }, - "SSEDescription": { - "target": "com.amazonaws.dynamodb#SSEDescription", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#StreamArn": { - "type": "string", - "traits": { - "smithy.api#length": { - "min": 37, - "max": 1024 - } - } - }, - "com.amazonaws.dynamodb#StreamEnabled": { - "type": "boolean" - }, - "com.amazonaws.dynamodb#StreamSpecification": { - "type": "structure", - "members": { - "StreamEnabled": { - "target": "com.amazonaws.dynamodb#StreamEnabled", - "traits": { - "smithy.api#required": {} - } - }, - "StreamViewType": { - "target": "com.amazonaws.dynamodb#StreamViewType", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#StreamViewType": { - "type": "enum", - "members": { - "NEW_IMAGE": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "NEW_IMAGE" - } - }, - "OLD_IMAGE": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "OLD_IMAGE" - } - }, - "NEW_AND_OLD_IMAGES": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "NEW_AND_OLD_IMAGES" - } - }, - "KEYS_ONLY": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "KEYS_ONLY" - } - } - } - }, - "com.amazonaws.dynamodb#String": { - "type": "string" - }, - "com.amazonaws.dynamodb#StringAttributeValue": { - "type": "string" - }, - "com.amazonaws.dynamodb#StringSetAttributeValue": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#StringAttributeValue" - } - }, - "com.amazonaws.dynamodb#TableAlreadyExistsException": { - "type": "structure", - "members": { - "message": { - "target": "com.amazonaws.dynamodb#ErrorMessage" - } - }, - "traits": { - "smithy.api#error": "client" - } - }, - "com.amazonaws.dynamodb#TableArn": { - "type": "string", - "traits": { - "smithy.api#length": { - "min": 1, - "max": 1024 - } - } - }, - "com.amazonaws.dynamodb#TableAutoScalingDescription": { - "type": "structure", - "members": { - "TableName": { - "target": "com.amazonaws.dynamodb#TableName", - "traits": {} - }, - "TableStatus": { - "target": "com.amazonaws.dynamodb#TableStatus", - "traits": {} - }, - "Replicas": { - "target": "com.amazonaws.dynamodb#ReplicaAutoScalingDescriptionList", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#TableClass": { - "type": "enum", - "members": { - "STANDARD": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "STANDARD" - } - }, - "STANDARD_INFREQUENT_ACCESS": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "STANDARD_INFREQUENT_ACCESS" - } - } - } - }, - "com.amazonaws.dynamodb#TableClassSummary": { - "type": "structure", - "members": { - "TableClass": { - "target": "com.amazonaws.dynamodb#TableClass", - "traits": {} - }, - "LastUpdateDateTime": { - "target": "com.amazonaws.dynamodb#Date", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#TableCreationDateTime": { - "type": "timestamp" - }, - "com.amazonaws.dynamodb#TableCreationParameters": { - "type": "structure", - "members": { - "TableName": { - "target": "com.amazonaws.dynamodb#TableName", - "traits": { - "smithy.api#required": {} - } - }, - "AttributeDefinitions": { - "target": "com.amazonaws.dynamodb#AttributeDefinitions", - "traits": { - "smithy.api#required": {} - } - }, - "KeySchema": { - "target": "com.amazonaws.dynamodb#KeySchema", - "traits": { - "smithy.api#required": {} - } - }, - "BillingMode": { - "target": "com.amazonaws.dynamodb#BillingMode", - "traits": {} - }, - "ProvisionedThroughput": { - "target": "com.amazonaws.dynamodb#ProvisionedThroughput" - }, - "OnDemandThroughput": { - "target": "com.amazonaws.dynamodb#OnDemandThroughput" - }, - "SSESpecification": { - "target": "com.amazonaws.dynamodb#SSESpecification" - }, - "GlobalSecondaryIndexes": { - "target": "com.amazonaws.dynamodb#GlobalSecondaryIndexList", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#TableDescription": { - "type": "structure", - "members": { - "AttributeDefinitions": { - "target": "com.amazonaws.dynamodb#AttributeDefinitions", - "traits": {} - }, - "TableName": { - "target": "com.amazonaws.dynamodb#TableName", - "traits": {} - }, - "KeySchema": { - "target": "com.amazonaws.dynamodb#KeySchema", - "traits": {} - }, - "TableStatus": { - "target": "com.amazonaws.dynamodb#TableStatus", - "traits": {} - }, - "CreationDateTime": { - "target": "com.amazonaws.dynamodb#Date", - "traits": {} - }, - "ProvisionedThroughput": { - "target": "com.amazonaws.dynamodb#ProvisionedThroughputDescription", - "traits": {} - }, - "TableSizeBytes": { - "target": "com.amazonaws.dynamodb#LongObject", - "traits": {} - }, - "ItemCount": { - "target": "com.amazonaws.dynamodb#LongObject", - "traits": {} - }, - "TableArn": { - "target": "com.amazonaws.dynamodb#String", - "traits": {} - }, - "TableId": { - "target": "com.amazonaws.dynamodb#TableId", - "traits": {} - }, - "BillingModeSummary": { - "target": "com.amazonaws.dynamodb#BillingModeSummary", - "traits": {} - }, - "LocalSecondaryIndexes": { - "target": "com.amazonaws.dynamodb#LocalSecondaryIndexDescriptionList", - "traits": {} - }, - "GlobalSecondaryIndexes": { - "target": "com.amazonaws.dynamodb#GlobalSecondaryIndexDescriptionList", - "traits": {} - }, - "StreamSpecification": { - "target": "com.amazonaws.dynamodb#StreamSpecification", - "traits": {} - }, - "LatestStreamLabel": { - "target": "com.amazonaws.dynamodb#String", - "traits": {} - }, - "LatestStreamArn": { - "target": "com.amazonaws.dynamodb#StreamArn", - "traits": {} - }, - "GlobalTableVersion": { - "target": "com.amazonaws.dynamodb#String", - "traits": {} - }, - "Replicas": { - "target": "com.amazonaws.dynamodb#ReplicaDescriptionList", - "traits": {} - }, - "RestoreSummary": { - "target": "com.amazonaws.dynamodb#RestoreSummary", - "traits": {} - }, - "SSEDescription": { - "target": "com.amazonaws.dynamodb#SSEDescription", - "traits": {} - }, - "ArchivalSummary": { - "target": "com.amazonaws.dynamodb#ArchivalSummary", - "traits": {} - }, - "TableClassSummary": { - "target": "com.amazonaws.dynamodb#TableClassSummary", - "traits": {} - }, - "DeletionProtectionEnabled": { - "target": "com.amazonaws.dynamodb#DeletionProtectionEnabled", - "traits": {} - }, - "OnDemandThroughput": { - "target": "com.amazonaws.dynamodb#OnDemandThroughput", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#TableId": { - "type": "string", - "traits": { - "smithy.api#pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$" - } - }, - "com.amazonaws.dynamodb#TableInUseException": { - "type": "structure", - "members": { - "message": { - "target": "com.amazonaws.dynamodb#ErrorMessage" - } - }, - "traits": { - "smithy.api#error": "client" - } - }, - "com.amazonaws.dynamodb#TableName": { - "type": "string", - "traits": { - "smithy.api#length": { - "min": 3, - "max": 255 - }, - "smithy.api#pattern": "^[a-zA-Z0-9_.-]+$" - } - }, - "com.amazonaws.dynamodb#TableNameList": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#TableName" - } - }, - "com.amazonaws.dynamodb#TableNotFoundException": { - "type": "structure", - "members": { - "message": { - "target": "com.amazonaws.dynamodb#ErrorMessage" - } - }, - "traits": { - "smithy.api#error": "client" - } - }, - "com.amazonaws.dynamodb#TableStatus": { - "type": "enum", - "members": { - "CREATING": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "CREATING" - } - }, - "UPDATING": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "UPDATING" - } - }, - "DELETING": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "DELETING" - } - }, - "ACTIVE": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "ACTIVE" - } - }, - "INACCESSIBLE_ENCRYPTION_CREDENTIALS": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "INACCESSIBLE_ENCRYPTION_CREDENTIALS" - } - }, - "ARCHIVING": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "ARCHIVING" - } - }, - "ARCHIVED": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "ARCHIVED" - } - } - } - }, - "com.amazonaws.dynamodb#Tag": { - "type": "structure", - "members": { - "Key": { - "target": "com.amazonaws.dynamodb#TagKeyString", - "traits": { - "smithy.api#required": {} - } - }, - "Value": { - "target": "com.amazonaws.dynamodb#TagValueString", - "traits": { - "smithy.api#required": {} - } - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#TagKeyList": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#TagKeyString" - } - }, - "com.amazonaws.dynamodb#TagKeyString": { - "type": "string", - "traits": { - "smithy.api#length": { - "min": 1, - "max": 128 - } - } - }, - "com.amazonaws.dynamodb#TagList": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#Tag" - } - }, - "com.amazonaws.dynamodb#TagResource": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#TagResourceInput" - }, - "output": { - "target": "smithy.api#Unit" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#InvalidEndpointException" - }, - { - "target": "com.amazonaws.dynamodb#LimitExceededException" - }, - { - "target": "com.amazonaws.dynamodb#ResourceInUseException" - }, - { - "target": "com.amazonaws.dynamodb#ResourceNotFoundException" - } - ], - "traits": { - "aws.api#clientDiscoveredEndpoint": { - "required": false - } - } - }, - "com.amazonaws.dynamodb#TagResourceInput": { - "type": "structure", - "members": { - "ResourceArn": { - "target": "com.amazonaws.dynamodb#ResourceArnString", - "traits": { - "smithy.api#required": {} - } - }, - "Tags": { - "target": "com.amazonaws.dynamodb#TagList", - "traits": { - "smithy.api#required": {} - } - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#TagValueString": { - "type": "string", - "traits": { - "smithy.api#length": { - "min": 0, - "max": 256 - } - } - }, - "com.amazonaws.dynamodb#TimeRangeLowerBound": { - "type": "timestamp" - }, - "com.amazonaws.dynamodb#TimeRangeUpperBound": { - "type": "timestamp" - }, - "com.amazonaws.dynamodb#TimeToLiveAttributeName": { - "type": "string", - "traits": { - "smithy.api#length": { - "min": 1, - "max": 255 - } - } - }, - "com.amazonaws.dynamodb#TimeToLiveDescription": { - "type": "structure", - "members": { - "TimeToLiveStatus": { - "target": "com.amazonaws.dynamodb#TimeToLiveStatus", - "traits": {} - }, - "AttributeName": { - "target": "com.amazonaws.dynamodb#TimeToLiveAttributeName", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#TimeToLiveEnabled": { - "type": "boolean" - }, - "com.amazonaws.dynamodb#TimeToLiveSpecification": { - "type": "structure", - "members": { - "Enabled": { - "target": "com.amazonaws.dynamodb#TimeToLiveEnabled", - "traits": { - "smithy.api#required": {} - } - }, - "AttributeName": { - "target": "com.amazonaws.dynamodb#TimeToLiveAttributeName", - "traits": { - "smithy.api#required": {} - } - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#TimeToLiveStatus": { - "type": "enum", - "members": { - "ENABLING": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "ENABLING" - } - }, - "DISABLING": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "DISABLING" - } - }, - "ENABLED": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "ENABLED" - } - }, - "DISABLED": { - "target": "smithy.api#Unit", - "traits": { - "smithy.api#enumValue": "DISABLED" - } - } - } - }, - "com.amazonaws.dynamodb#TransactGetItem": { - "type": "structure", - "members": { - "Get": { - "target": "com.amazonaws.dynamodb#Get", - "traits": { - "smithy.api#required": {} - } - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#TransactGetItemList": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#TransactGetItem" - }, - "traits": { - "smithy.api#length": { - "min": 1, - "max": 100 - } - } - }, - "com.amazonaws.dynamodb#TransactGetItems": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#TransactGetItemsInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#TransactGetItemsOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#InvalidEndpointException" - }, - { - "target": "com.amazonaws.dynamodb#ProvisionedThroughputExceededException" - }, - { - "target": "com.amazonaws.dynamodb#RequestLimitExceeded" - }, - { - "target": "com.amazonaws.dynamodb#ResourceNotFoundException" - }, - { - "target": "com.amazonaws.dynamodb#TransactionCanceledException" - } - ], - "traits": { - "aws.api#clientDiscoveredEndpoint": { - "required": false - } - } - }, - "com.amazonaws.dynamodb#TransactGetItemsInput": { - "type": "structure", - "members": { - "TransactItems": { - "target": "com.amazonaws.dynamodb#TransactGetItemList", - "traits": { - "smithy.api#required": {} - } - }, - "ReturnConsumedCapacity": { - "target": "com.amazonaws.dynamodb#ReturnConsumedCapacity", - "traits": {} - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#TransactGetItemsOutput": { - "type": "structure", - "members": { - "ConsumedCapacity": { - "target": "com.amazonaws.dynamodb#ConsumedCapacityMultiple", - "traits": {} - }, - "Responses": { - "target": "com.amazonaws.dynamodb#ItemResponseList", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#TransactWriteItem": { - "type": "structure", - "members": { - "ConditionCheck": { - "target": "com.amazonaws.dynamodb#ConditionCheck", - "traits": {} - }, - "Put": { - "target": "com.amazonaws.dynamodb#Put", - "traits": {} - }, - "Delete": { - "target": "com.amazonaws.dynamodb#Delete", - "traits": {} - }, - "Update": { - "target": "com.amazonaws.dynamodb#Update", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#TransactWriteItemList": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#TransactWriteItem" - }, - "traits": { - "smithy.api#length": { - "min": 1, - "max": 100 - } - } - }, - "com.amazonaws.dynamodb#TransactWriteItems": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#TransactWriteItemsInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#TransactWriteItemsOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#IdempotentParameterMismatchException" - }, - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#InvalidEndpointException" - }, - { - "target": "com.amazonaws.dynamodb#ProvisionedThroughputExceededException" - }, - { - "target": "com.amazonaws.dynamodb#RequestLimitExceeded" - }, - { - "target": "com.amazonaws.dynamodb#ResourceNotFoundException" - }, - { - "target": "com.amazonaws.dynamodb#TransactionCanceledException" - }, - { - "target": "com.amazonaws.dynamodb#TransactionInProgressException" - } - ], - "traits": { - "aws.api#clientDiscoveredEndpoint": { - "required": false - } - } - }, - "com.amazonaws.dynamodb#TransactWriteItemsInput": { - "type": "structure", - "members": { - "TransactItems": { - "target": "com.amazonaws.dynamodb#TransactWriteItemList", - "traits": { - "smithy.api#required": {} - } - }, - "ReturnConsumedCapacity": { - "target": "com.amazonaws.dynamodb#ReturnConsumedCapacity" - }, - "ReturnItemCollectionMetrics": { - "target": "com.amazonaws.dynamodb#ReturnItemCollectionMetrics", - "traits": {} - }, - "ClientRequestToken": { - "target": "com.amazonaws.dynamodb#ClientRequestToken", - "traits": { - "smithy.api#idempotencyToken": {} - } - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#TransactWriteItemsOutput": { - "type": "structure", - "members": { - "ConsumedCapacity": { - "target": "com.amazonaws.dynamodb#ConsumedCapacityMultiple", - "traits": {} - }, - "ItemCollectionMetrics": { - "target": "com.amazonaws.dynamodb#ItemCollectionMetricsPerTable", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#TransactionCanceledException": { - "type": "structure", - "members": { - "Message": { - "target": "com.amazonaws.dynamodb#ErrorMessage" - }, - "CancellationReasons": { - "target": "com.amazonaws.dynamodb#CancellationReasonList", - "traits": {} - } - }, - "traits": { - "smithy.api#error": "client" - } - }, - "com.amazonaws.dynamodb#TransactionConflictException": { - "type": "structure", - "members": { - "message": { - "target": "com.amazonaws.dynamodb#ErrorMessage" - } - }, - "traits": { - "smithy.api#error": "client" - } - }, - "com.amazonaws.dynamodb#TransactionInProgressException": { - "type": "structure", - "members": { - "Message": { - "target": "com.amazonaws.dynamodb#ErrorMessage" - } - }, - "traits": { - "smithy.api#error": "client" - } - }, - "com.amazonaws.dynamodb#UntagResource": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#UntagResourceInput" - }, - "output": { - "target": "smithy.api#Unit" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#InvalidEndpointException" - }, - { - "target": "com.amazonaws.dynamodb#LimitExceededException" - }, - { - "target": "com.amazonaws.dynamodb#ResourceInUseException" - }, - { - "target": "com.amazonaws.dynamodb#ResourceNotFoundException" - } - ], - "traits": { - "aws.api#clientDiscoveredEndpoint": { - "required": false - } - } - }, - "com.amazonaws.dynamodb#UntagResourceInput": { - "type": "structure", - "members": { - "ResourceArn": { - "target": "com.amazonaws.dynamodb#ResourceArnString", - "traits": { - "smithy.api#required": {} - } - }, - "TagKeys": { - "target": "com.amazonaws.dynamodb#TagKeyList", - "traits": { - "smithy.api#required": {} - } - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#Update": { - "type": "structure", - "members": { - "Key": { - "target": "com.amazonaws.dynamodb#Key", - "traits": { - "smithy.api#required": {} - } - }, - "UpdateExpression": { - "target": "com.amazonaws.dynamodb#UpdateExpression", - "traits": { - "smithy.api#required": {} - } - }, - "TableName": { - "target": "com.amazonaws.dynamodb#TableArn", - "traits": { - "smithy.api#required": {} - } - }, - "ConditionExpression": { - "target": "com.amazonaws.dynamodb#ConditionExpression", - "traits": {} - }, - "ExpressionAttributeNames": { - "target": "com.amazonaws.dynamodb#ExpressionAttributeNameMap", - "traits": {} - }, - "ExpressionAttributeValues": { - "target": "com.amazonaws.dynamodb#ExpressionAttributeValueMap", - "traits": {} - }, - "ReturnValuesOnConditionCheckFailure": { - "target": "com.amazonaws.dynamodb#ReturnValuesOnConditionCheckFailure", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#UpdateContinuousBackups": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#UpdateContinuousBackupsInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#UpdateContinuousBackupsOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#ContinuousBackupsUnavailableException" - }, - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#InvalidEndpointException" - }, - { - "target": "com.amazonaws.dynamodb#TableNotFoundException" - } - ], - "traits": { - "aws.api#clientDiscoveredEndpoint": { - "required": false - } - } - }, - "com.amazonaws.dynamodb#UpdateContinuousBackupsInput": { - "type": "structure", - "members": { - "TableName": { - "target": "com.amazonaws.dynamodb#TableArn", - "traits": { - "smithy.api#required": {} - } - }, - "PointInTimeRecoverySpecification": { - "target": "com.amazonaws.dynamodb#PointInTimeRecoverySpecification", - "traits": { - "smithy.api#required": {} - } - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#UpdateContinuousBackupsOutput": { - "type": "structure", - "members": { - "ContinuousBackupsDescription": { - "target": "com.amazonaws.dynamodb#ContinuousBackupsDescription", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#UpdateContributorInsights": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#UpdateContributorInsightsInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#UpdateContributorInsightsOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#ResourceNotFoundException" - } - ], - "traits": {} - }, - "com.amazonaws.dynamodb#UpdateContributorInsightsInput": { - "type": "structure", - "members": { - "TableName": { - "target": "com.amazonaws.dynamodb#TableArn", - "traits": { - "smithy.api#required": {} - } - }, - "IndexName": { - "target": "com.amazonaws.dynamodb#IndexName", - "traits": {} - }, - "ContributorInsightsAction": { - "target": "com.amazonaws.dynamodb#ContributorInsightsAction", - "traits": { - "smithy.api#required": {} - } - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#UpdateContributorInsightsOutput": { - "type": "structure", - "members": { - "TableName": { - "target": "com.amazonaws.dynamodb#TableName", - "traits": {} - }, - "IndexName": { - "target": "com.amazonaws.dynamodb#IndexName", - "traits": {} - }, - "ContributorInsightsStatus": { - "target": "com.amazonaws.dynamodb#ContributorInsightsStatus", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#UpdateExpression": { - "type": "string" - }, - "com.amazonaws.dynamodb#UpdateGlobalSecondaryIndexAction": { - "type": "structure", - "members": { - "IndexName": { - "target": "com.amazonaws.dynamodb#IndexName", - "traits": { - "smithy.api#required": {} - } - }, - "ProvisionedThroughput": { - "target": "com.amazonaws.dynamodb#ProvisionedThroughput", - "traits": {} - }, - "OnDemandThroughput": { - "target": "com.amazonaws.dynamodb#OnDemandThroughput", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#UpdateGlobalTable": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#UpdateGlobalTableInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#UpdateGlobalTableOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#GlobalTableNotFoundException" - }, - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#InvalidEndpointException" - }, - { - "target": "com.amazonaws.dynamodb#ReplicaAlreadyExistsException" - }, - { - "target": "com.amazonaws.dynamodb#ReplicaNotFoundException" - }, - { - "target": "com.amazonaws.dynamodb#TableNotFoundException" - } - ], - "traits": { - "aws.api#clientDiscoveredEndpoint": { - "required": false - } - } - }, - "com.amazonaws.dynamodb#UpdateGlobalTableInput": { - "type": "structure", - "members": { - "GlobalTableName": { - "target": "com.amazonaws.dynamodb#TableName", - "traits": { - "smithy.api#required": {} - } - }, - "ReplicaUpdates": { - "target": "com.amazonaws.dynamodb#ReplicaUpdateList", - "traits": { - "smithy.api#required": {} - } - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#UpdateGlobalTableOutput": { - "type": "structure", - "members": { - "GlobalTableDescription": { - "target": "com.amazonaws.dynamodb#GlobalTableDescription", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#UpdateGlobalTableSettings": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#UpdateGlobalTableSettingsInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#UpdateGlobalTableSettingsOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#GlobalTableNotFoundException" - }, - { - "target": "com.amazonaws.dynamodb#IndexNotFoundException" - }, - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#InvalidEndpointException" - }, - { - "target": "com.amazonaws.dynamodb#LimitExceededException" - }, - { - "target": "com.amazonaws.dynamodb#ReplicaNotFoundException" - }, - { - "target": "com.amazonaws.dynamodb#ResourceInUseException" - } - ], - "traits": { - "aws.api#clientDiscoveredEndpoint": { - "required": false - } - } - }, - "com.amazonaws.dynamodb#UpdateGlobalTableSettingsInput": { - "type": "structure", - "members": { - "GlobalTableName": { - "target": "com.amazonaws.dynamodb#TableName", - "traits": { - "smithy.api#required": {} - } - }, - "GlobalTableBillingMode": { - "target": "com.amazonaws.dynamodb#BillingMode", - "traits": {} - }, - "GlobalTableProvisionedWriteCapacityUnits": { - "target": "com.amazonaws.dynamodb#PositiveLongObject", - "traits": {} - }, - "GlobalTableProvisionedWriteCapacityAutoScalingSettingsUpdate": { - "target": "com.amazonaws.dynamodb#AutoScalingSettingsUpdate", - "traits": {} - }, - "GlobalTableGlobalSecondaryIndexSettingsUpdate": { - "target": "com.amazonaws.dynamodb#GlobalTableGlobalSecondaryIndexSettingsUpdateList", - "traits": {} - }, - "ReplicaSettingsUpdate": { - "target": "com.amazonaws.dynamodb#ReplicaSettingsUpdateList", - "traits": {} - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#UpdateGlobalTableSettingsOutput": { - "type": "structure", - "members": { - "GlobalTableName": { - "target": "com.amazonaws.dynamodb#TableName", - "traits": {} - }, - "ReplicaSettings": { - "target": "com.amazonaws.dynamodb#ReplicaSettingsDescriptionList", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#UpdateItem": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#UpdateItemInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#UpdateItemOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#ConditionalCheckFailedException" - }, - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#InvalidEndpointException" - }, - { - "target": "com.amazonaws.dynamodb#ItemCollectionSizeLimitExceededException" - }, - { - "target": "com.amazonaws.dynamodb#ProvisionedThroughputExceededException" - }, - { - "target": "com.amazonaws.dynamodb#RequestLimitExceeded" - }, - { - "target": "com.amazonaws.dynamodb#ResourceNotFoundException" - }, - { - "target": "com.amazonaws.dynamodb#TransactionConflictException" - } - ], - "traits": { - "aws.api#clientDiscoveredEndpoint": { - "required": false - }, - "smithy.api#examples": [ - { - "title": "To update an item in a table", - "documentation": "This example updates an item in the Music table. It adds a new attribute (Year) and modifies the AlbumTitle attribute. All of the attributes in the item, as they appear after the update, are returned in the response.", - "input": { - "TableName": "Music", - "Key": { - "Artist": { - "S": "Acme Band" - }, - "SongTitle": { - "S": "Happy Day" - } - }, - "UpdateExpression": "SET #Y = :y, #AT = :t", - "ExpressionAttributeNames": { - "#Y": "Year", - "#AT": "AlbumTitle" - }, - "ExpressionAttributeValues": { - ":y": { - "N": "2015" - }, - ":t": { - "S": "Louder Than Ever" - } - }, - "ReturnValues": "ALL_NEW" - }, - "output": { - "Attributes": { - "AlbumTitle": { - "S": "Louder Than Ever" - }, - "Artist": { - "S": "Acme Band" - }, - "Year": { - "N": "2015" - }, - "SongTitle": { - "S": "Happy Day" - } - } - } - } - ] - } - }, - "com.amazonaws.dynamodb#UpdateItemInput": { - "type": "structure", - "members": { - "TableName": { - "target": "com.amazonaws.dynamodb#TableArn", - "traits": { - "smithy.api#required": {} - } - }, - "Key": { - "target": "com.amazonaws.dynamodb#Key", - "traits": { - "smithy.api#required": {} - } - }, - "AttributeUpdates": { - "target": "com.amazonaws.dynamodb#AttributeUpdates", - "traits": {} - }, - "Expected": { - "target": "com.amazonaws.dynamodb#ExpectedAttributeMap", - "traits": {} - }, - "ConditionalOperator": { - "target": "com.amazonaws.dynamodb#ConditionalOperator", - "traits": {} - }, - "ReturnValues": { - "target": "com.amazonaws.dynamodb#ReturnValue", - "traits": {} - }, - "ReturnConsumedCapacity": { - "target": "com.amazonaws.dynamodb#ReturnConsumedCapacity" - }, - "ReturnItemCollectionMetrics": { - "target": "com.amazonaws.dynamodb#ReturnItemCollectionMetrics", - "traits": {} - }, - "UpdateExpression": { - "target": "com.amazonaws.dynamodb#UpdateExpression", - "traits": {} - }, - "ConditionExpression": { - "target": "com.amazonaws.dynamodb#ConditionExpression", - "traits": {} - }, - "ExpressionAttributeNames": { - "target": "com.amazonaws.dynamodb#ExpressionAttributeNameMap", - "traits": {} - }, - "ExpressionAttributeValues": { - "target": "com.amazonaws.dynamodb#ExpressionAttributeValueMap", - "traits": {} - }, - "ReturnValuesOnConditionCheckFailure": { - "target": "com.amazonaws.dynamodb#ReturnValuesOnConditionCheckFailure", - "traits": {} - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#UpdateItemOutput": { - "type": "structure", - "members": { - "Attributes": { - "target": "com.amazonaws.dynamodb#AttributeMap", - "traits": {} - }, - "ConsumedCapacity": { - "target": "com.amazonaws.dynamodb#ConsumedCapacity", - "traits": {} - }, - "ItemCollectionMetrics": { - "target": "com.amazonaws.dynamodb#ItemCollectionMetrics", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#UpdateKinesisStreamingConfiguration": { - "type": "structure", - "members": { - "ApproximateCreationDateTimePrecision": { - "target": "com.amazonaws.dynamodb#ApproximateCreationDateTimePrecision", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#UpdateKinesisStreamingDestination": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#UpdateKinesisStreamingDestinationInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#UpdateKinesisStreamingDestinationOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#InvalidEndpointException" - }, - { - "target": "com.amazonaws.dynamodb#LimitExceededException" - }, - { - "target": "com.amazonaws.dynamodb#ResourceInUseException" - }, - { - "target": "com.amazonaws.dynamodb#ResourceNotFoundException" - } - ], - "traits": { - "aws.api#clientDiscoveredEndpoint": { - "required": false - } - } - }, - "com.amazonaws.dynamodb#UpdateKinesisStreamingDestinationInput": { - "type": "structure", - "members": { - "TableName": { - "target": "com.amazonaws.dynamodb#TableArn", - "traits": { - "smithy.api#required": {} - } - }, - "StreamArn": { - "target": "com.amazonaws.dynamodb#StreamArn", - "traits": { - "smithy.api#required": {} - } - }, - "UpdateKinesisStreamingConfiguration": { - "target": "com.amazonaws.dynamodb#UpdateKinesisStreamingConfiguration", - "traits": {} - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#UpdateKinesisStreamingDestinationOutput": { - "type": "structure", - "members": { - "TableName": { - "target": "com.amazonaws.dynamodb#TableName", - "traits": {} - }, - "StreamArn": { - "target": "com.amazonaws.dynamodb#StreamArn", - "traits": {} - }, - "DestinationStatus": { - "target": "com.amazonaws.dynamodb#DestinationStatus", - "traits": {} - }, - "UpdateKinesisStreamingConfiguration": { - "target": "com.amazonaws.dynamodb#UpdateKinesisStreamingConfiguration", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#UpdateReplicationGroupMemberAction": { - "type": "structure", - "members": { - "RegionName": { - "target": "com.amazonaws.dynamodb#RegionName", - "traits": { - "smithy.api#required": {} - } - }, - "KMSMasterKeyId": { - "target": "com.amazonaws.dynamodb#KMSMasterKeyId", - "traits": {} - }, - "ProvisionedThroughputOverride": { - "target": "com.amazonaws.dynamodb#ProvisionedThroughputOverride", - "traits": {} - }, - "OnDemandThroughputOverride": { - "target": "com.amazonaws.dynamodb#OnDemandThroughputOverride", - "traits": {} - }, - "GlobalSecondaryIndexes": { - "target": "com.amazonaws.dynamodb#ReplicaGlobalSecondaryIndexList", - "traits": {} - }, - "TableClassOverride": { - "target": "com.amazonaws.dynamodb#TableClass", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#UpdateTable": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#UpdateTableInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#UpdateTableOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#InvalidEndpointException" - }, - { - "target": "com.amazonaws.dynamodb#LimitExceededException" - }, - { - "target": "com.amazonaws.dynamodb#ResourceInUseException" - }, - { - "target": "com.amazonaws.dynamodb#ResourceNotFoundException" - } - ], - "traits": { - "aws.api#clientDiscoveredEndpoint": { - "required": false - } - } - }, - "com.amazonaws.dynamodb#UpdateTableInput": { - "type": "structure", - "members": { - "AttributeDefinitions": { - "target": "com.amazonaws.dynamodb#AttributeDefinitions", - "traits": {} - }, - "TableName": { - "target": "com.amazonaws.dynamodb#TableArn", - "traits": { - "smithy.api#required": {} - } - }, - "BillingMode": { - "target": "com.amazonaws.dynamodb#BillingMode", - "traits": {} - }, - "ProvisionedThroughput": { - "target": "com.amazonaws.dynamodb#ProvisionedThroughput", - "traits": {} - }, - "GlobalSecondaryIndexUpdates": { - "target": "com.amazonaws.dynamodb#GlobalSecondaryIndexUpdateList", - "traits": {} - }, - "StreamSpecification": { - "target": "com.amazonaws.dynamodb#StreamSpecification", - "traits": {} - }, - "SSESpecification": { - "target": "com.amazonaws.dynamodb#SSESpecification", - "traits": {} - }, - "ReplicaUpdates": { - "target": "com.amazonaws.dynamodb#ReplicationGroupUpdateList", - "traits": {} - }, - "TableClass": { - "target": "com.amazonaws.dynamodb#TableClass", - "traits": {} - }, - "DeletionProtectionEnabled": { - "target": "com.amazonaws.dynamodb#DeletionProtectionEnabled", - "traits": {} - }, - "OnDemandThroughput": { - "target": "com.amazonaws.dynamodb#OnDemandThroughput", - "traits": {} - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#UpdateTableOutput": { - "type": "structure", - "members": { - "TableDescription": { - "target": "com.amazonaws.dynamodb#TableDescription", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#UpdateTableReplicaAutoScaling": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#UpdateTableReplicaAutoScalingInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#UpdateTableReplicaAutoScalingOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#LimitExceededException" - }, - { - "target": "com.amazonaws.dynamodb#ResourceInUseException" - }, - { - "target": "com.amazonaws.dynamodb#ResourceNotFoundException" - } - ], - "traits": {} - }, - "com.amazonaws.dynamodb#UpdateTableReplicaAutoScalingInput": { - "type": "structure", - "members": { - "GlobalSecondaryIndexUpdates": { - "target": "com.amazonaws.dynamodb#GlobalSecondaryIndexAutoScalingUpdateList", - "traits": {} - }, - "TableName": { - "target": "com.amazonaws.dynamodb#TableArn", - "traits": { - "smithy.api#required": {} - } - }, - "ProvisionedWriteCapacityAutoScalingUpdate": { - "target": "com.amazonaws.dynamodb#AutoScalingSettingsUpdate" - }, - "ReplicaUpdates": { - "target": "com.amazonaws.dynamodb#ReplicaAutoScalingUpdateList", - "traits": {} - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#UpdateTableReplicaAutoScalingOutput": { - "type": "structure", - "members": { - "TableAutoScalingDescription": { - "target": "com.amazonaws.dynamodb#TableAutoScalingDescription", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#UpdateTimeToLive": { - "type": "operation", - "input": { - "target": "com.amazonaws.dynamodb#UpdateTimeToLiveInput" - }, - "output": { - "target": "com.amazonaws.dynamodb#UpdateTimeToLiveOutput" - }, - "errors": [ - { - "target": "com.amazonaws.dynamodb#InternalServerError" - }, - { - "target": "com.amazonaws.dynamodb#InvalidEndpointException" - }, - { - "target": "com.amazonaws.dynamodb#LimitExceededException" - }, - { - "target": "com.amazonaws.dynamodb#ResourceInUseException" - }, - { - "target": "com.amazonaws.dynamodb#ResourceNotFoundException" - } - ], - "traits": { - "aws.api#clientDiscoveredEndpoint": { - "required": false - } - } - }, - "com.amazonaws.dynamodb#UpdateTimeToLiveInput": { - "type": "structure", - "members": { - "TableName": { - "target": "com.amazonaws.dynamodb#TableArn", - "traits": { - "smithy.api#required": {} - } - }, - "TimeToLiveSpecification": { - "target": "com.amazonaws.dynamodb#TimeToLiveSpecification", - "traits": { - "smithy.api#required": {} - } - } - }, - "traits": { - "smithy.api#input": {} - } - }, - "com.amazonaws.dynamodb#UpdateTimeToLiveOutput": { - "type": "structure", - "members": { - "TimeToLiveSpecification": { - "target": "com.amazonaws.dynamodb#TimeToLiveSpecification", - "traits": {} - } - }, - "traits": { - "smithy.api#output": {} - } - }, - "com.amazonaws.dynamodb#WriteRequest": { - "type": "structure", - "members": { - "PutRequest": { - "target": "com.amazonaws.dynamodb#PutRequest", - "traits": {} - }, - "DeleteRequest": { - "target": "com.amazonaws.dynamodb#DeleteRequest", - "traits": {} - } - }, - "traits": {} - }, - "com.amazonaws.dynamodb#WriteRequests": { - "type": "list", - "member": { - "target": "com.amazonaws.dynamodb#WriteRequest" - }, - "traits": { - "smithy.api#length": { - "min": 1, - "max": 25 - } - } - } - } -} diff --git a/examples/dynamodb-client/settings.gradle.kts b/examples/dynamodb-client/settings.gradle.kts deleted file mode 100644 index a00d5dc29..000000000 --- a/examples/dynamodb-client/settings.gradle.kts +++ /dev/null @@ -1,19 +0,0 @@ -/** - * Generated client from DynamoDB service model - */ - -pluginManagement { - val smithyGradleVersion: String by settings - - plugins { - id("software.amazon.smithy.gradle.smithy-base").version(smithyGradleVersion) - } - - repositories { - mavenLocal() - mavenCentral() - gradlePluginPortal() - } -} - -rootProject.name = "DynamoDBClient" diff --git a/examples/dynamodb-client/smithy-build.json b/examples/dynamodb-client/smithy-build.json deleted file mode 100644 index fab3cb0fa..000000000 --- a/examples/dynamodb-client/smithy-build.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "version": "1.0", - "plugins": { - "java-codegen": { - "service": "com.amazonaws.dynamodb#DynamoDB_20120810", - "name": "DynamoDB", - "namespace": "software.amazon.smithy.java.example.dynamodb", - "protocol": "aws.protocols#awsJson1_0", - "defaultSettings": [ - "software.amazon.smithy.java.aws.client.auth.scheme.sigv4.SigV4Settings" - ], - "transport": { - "http-java": {} - }, - "modes": ["client"] - } - } -} diff --git a/examples/dynamodb-client/src/jmh/java/software/amazon/smithy/java/example/dynamodb/DynamoDBSerde.java b/examples/dynamodb-client/src/jmh/java/software/amazon/smithy/java/example/dynamodb/DynamoDBSerde.java deleted file mode 100644 index 77054e32e..000000000 --- a/examples/dynamodb-client/src/jmh/java/software/amazon/smithy/java/example/dynamodb/DynamoDBSerde.java +++ /dev/null @@ -1,286 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -package software.amazon.smithy.java.example.dynamodb; - -import java.net.URI; -import java.net.URISyntaxException; -import java.nio.ByteBuffer; -import java.nio.charset.StandardCharsets; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Random; -import java.util.concurrent.TimeUnit; -import org.openjdk.jmh.annotations.Benchmark; -import org.openjdk.jmh.annotations.BenchmarkMode; -import org.openjdk.jmh.annotations.Mode; -import org.openjdk.jmh.annotations.OutputTimeUnit; -import org.openjdk.jmh.annotations.Param; -import org.openjdk.jmh.annotations.Scope; -import org.openjdk.jmh.annotations.Setup; -import org.openjdk.jmh.annotations.State; -import org.openjdk.jmh.infra.Blackhole; -import software.amazon.smithy.java.aws.client.awsjson.AwsJson1Protocol; -import software.amazon.smithy.java.context.Context; -import software.amazon.smithy.java.core.schema.ApiOperation; -import software.amazon.smithy.java.example.dynamodb.model.AttributeValue; -import software.amazon.smithy.java.example.dynamodb.model.GetItem; -import software.amazon.smithy.java.example.dynamodb.model.GetItemInput; -import software.amazon.smithy.java.example.dynamodb.model.GetItemOutput; -import software.amazon.smithy.java.example.dynamodb.model.PutItem; -import software.amazon.smithy.java.example.dynamodb.model.PutItemInput; -import software.amazon.smithy.java.example.dynamodb.model.PutItemOutput; -import software.amazon.smithy.java.http.api.HttpRequest; -import software.amazon.smithy.java.http.api.HttpResponse; -import software.amazon.smithy.java.io.datastream.DataStream; -import software.amazon.smithy.java.json.JsonCodec; -import software.amazon.smithy.model.shapes.ShapeId; - -@State(Scope.Benchmark) -@OutputTimeUnit(TimeUnit.NANOSECONDS) -@BenchmarkMode(Mode.AverageTime) -public class DynamoDBSerde { - - private static final JsonCodec CODEC = JsonCodec.builder().build(); - - @Benchmark - public void putItem(PutItemState s, Blackhole bh) { - var request = s.protocol.createRequest(s.operation, s.req, s.context, s.endpoint); - bh.consume(request); - } - - @Benchmark - public void getItem(GetItemState s, Blackhole bh) { - var resp = fullResponse(s.testItem.utf8); - var result = s.protocol.deserializeResponse(s.operation, s.context, s.operation.errorRegistry(), s.req, resp); - bh.consume(result); - } - - @State(Scope.Benchmark) - public static class PutItemState { - @Param({"TINY", "SMALL", "HUGE"}) - private TestItem testItem; - - ApiOperation operation; - URI endpoint; - AwsJson1Protocol protocol; - PutItemInput req; - Context context = Context.create(); - - @Setup - public void setup() throws URISyntaxException { - endpoint = new URI("https://dynamodb.us-east-1.amazonaws.com"); - operation = PutItem.instance(); - protocol = new AwsJson1Protocol(ShapeId.from("com.amazonaws.dynamodb#DynamoDB_20120810")); - req = PutItemInput.builder().tableName("a").item(testItem.getValue()).build(); - } - } - - @State(Scope.Benchmark) - public static class GetItemState { - @Param({"TINY", "SMALL", "HUGE"}) - private TestItemUnmarshalling testItem; - - ApiOperation operation; - Context context = Context.create(); - URI endpoint; - AwsJson1Protocol protocol; - HttpRequest req; - - @Setup - public void setup() throws URISyntaxException { - // This isn't actually used, but needed for the protocol implementation. - endpoint = new URI("https://dynamodb.us-east-1.amazonaws.com"); - req = HttpRequest.create().setMethod("POST").setUri(endpoint).toUnmodifiable(); - operation = GetItem.instance(); - protocol = new AwsJson1Protocol(ShapeId.from("com.amazonaws.dynamodb#DynamoDB_20120810")); - } - } - - public enum TestItem { - TINY, - SMALL, - HUGE; - - private static final ItemFactory FACTORY = new ItemFactory(); - - private Map av; - - static { - TINY.av = FACTORY.tiny(); - SMALL.av = FACTORY.small(); - HUGE.av = FACTORY.huge(); - } - - public Map getValue() { - return av; - } - } - - public enum TestItemUnmarshalling { - TINY, - SMALL, - HUGE; - - private byte[] utf8; - - static { - TINY.utf8 = toUtf8ByteArray(TestItem.TINY.av); - SMALL.utf8 = toUtf8ByteArray(TestItem.SMALL.av); - HUGE.utf8 = toUtf8ByteArray(TestItem.HUGE.av); - } - - public byte[] utf8() { - return utf8; - } - } - - private static byte[] toUtf8ByteArray(Map item) { - return CODEC.serializeToString(GetItemOutput.builder().item(item).build()).getBytes(StandardCharsets.UTF_8); - } - - private HttpResponse fullResponse(byte[] itemBytes) { - return HttpResponse.create() - .setStatusCode(200) - .setBody(DataStream.ofBytes(itemBytes)) - .toUnmodifiable(); - } - - static final class ItemFactory { - - private static final String ALPHA = "abcdefghijklmnopqrstuvwxyz"; - private static final Random RNG = new Random(); - - Map tiny() { - return Map.of("stringAttr", av(randomS())); - } - - Map small() { - return Map.of( - "stringAttr", - av(randomS()), - "binaryAttr", - av(randomB()), - "listAttr", - av(List.of(av(randomS()), av(randomB()), av(randomS())))); - } - - Map huge() { - return Map.of( - "hashKey", - av(randomS()), - "stringAttr", - av(randomS()), - "binaryAttr", - av(randomB()), - "listAttr", - av( - List.of( - av(randomS()), - av(randomS()), - av(randomS()), - av(randomS()), - av(randomS()), - av(randomS()), - av(randomS()), - av(randomS()), - av(randomS()), - av(randomS()), - av(randomS()), - av(randomS()), - av(randomS()), - av(randomS()), - av(randomB()), - av(Collections.singletonList(av(randomS()))), - av(Map.of("attrOne", av(randomS()))), - av( - Arrays.asList( - av(randomS()), - av(randomS()), - av(randomS()), - av(randomS()), - av(randomS()), - av(randomS()), - av(randomS()), - av(randomS()), - av(randomS()), - av(randomS()), - av(randomS()), - av(randomS()), - av(randomS()), - av(randomS()), - av(randomB()), - (av(randomS())), - av(Map.of("attrOne", av(randomS()))))))), - "mapAttr", - av( - Map.of( - "attrOne", - av(randomS()), - "attrTwo", - av(randomB()), - "attrThree", - av( - List.of( - av(randomS()), - av(randomS()), - av(randomS()), - av(randomS()), - av( - Map.of( - "attrOne", - av(randomS()), - "attrTwo", - av(randomB()), - "attrThree", - av( - List.of( - av(randomS()), - av(randomS()), - av(randomS()), - av(randomS())))))))))); - } - - private AttributeValue av(String val) { - return AttributeValue.builder().s(val).build(); - } - - private AttributeValue av(ByteBuffer val) { - return AttributeValue.builder().b(val).build(); - } - - private AttributeValue av(List val) { - return AttributeValue.builder().l(val).build(); - } - - private AttributeValue av(Map val) { - return AttributeValue.builder().m(val).build(); - } - - private String randomS(int len) { - StringBuilder sb = new StringBuilder(len); - for (int i = 0; i < len; ++i) { - sb.append(ALPHA.charAt(RNG.nextInt(ALPHA.length()))); - } - return sb.toString(); - } - - private String randomS() { - return randomS(16); - } - - private ByteBuffer randomB(int len) { - byte[] b = new byte[len]; - RNG.nextBytes(b); - return ByteBuffer.wrap(b); - } - - private ByteBuffer randomB() { - return randomB(16); - } - } -} diff --git a/protocol-test-harness/src/main/java/software/amazon/smithy/java/protocoltests/harness/ProtocolTestDocument.java b/protocol-test-harness/src/main/java/software/amazon/smithy/java/protocoltests/harness/ProtocolTestDocument.java index 14f4572d2..1bda21bb6 100644 --- a/protocol-test-harness/src/main/java/software/amazon/smithy/java/protocoltests/harness/ProtocolTestDocument.java +++ b/protocol-test-harness/src/main/java/software/amazon/smithy/java/protocoltests/harness/ProtocolTestDocument.java @@ -38,7 +38,7 @@ /** * This is a document format used in smithy protocol tests to model expected modeled values. */ -final class ProtocolTestDocument implements Document { +public final class ProtocolTestDocument implements Document { private static final Schema STRING_MAP_KEY = Schema.structureBuilder(PreludeSchemas.DOCUMENT.id()) .putMember("key", PreludeSchemas.STRING) @@ -68,8 +68,6 @@ public ProtocolTestDocument(Node node, String contentType) { case STRING -> ShapeType.STRING; case BOOLEAN -> ShapeType.BOOLEAN; case NULL -> ShapeType.DOCUMENT; - // The default case should never be reached. - default -> throw new SerializationException("Expected JSON value: " + node.getType()); }; this.schema = PreludeSchemas.getSchemaForType(type); } diff --git a/scripts/run-remote-benchmarks.sh b/scripts/run-remote-benchmarks.sh new file mode 100755 index 000000000..8eb579e23 --- /dev/null +++ b/scripts/run-remote-benchmarks.sh @@ -0,0 +1,123 @@ +#!/usr/bin/env bash +# +# Run serde benchmarks on a remote host via SSH. +# +# Builds the JMH fat jar locally, copies it to the remote host, runs benchmarks, +# then copies the results back. The converter runs on the remote host so that +# EC2 instance type detection (IMDS) works. +# +# Usage: +# scripts/run-remote-benchmarks.sh [options] +# +# SSH host alias from ~/.ssh/config +# +# Options: +# --fast Fast mode (1 warmup @ 5s, 3 measurement @ 5s) +# --includes JMH benchmark filter (e.g. RpcV2CborSerialize) +# --test-case-id Filter to a single test case ID +# --profilers Comma-separated JMH profilers (e.g. gc,stack) +# --skip-build Skip local jar build (use existing jar) +# --remote-java Path to java on remote host (default: java) +# --remote-dir Working directory on remote (default: /tmp/smithy-benchmarks) +# --output-dir Local directory for results (default: build/results/jmh) +# +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" +JAR_DIR="$PROJECT_ROOT/benchmarks/serde-benchmarks/build/libs" +LOCAL_RESULTS="$PROJECT_ROOT/benchmarks/serde-benchmarks/build/results/jmh" + +# Defaults +FAST=false +INCLUDES="" +TEST_CASE_ID="" +PROFILERS="" +SKIP_BUILD=false +REMOTE_JAVA="java" +REMOTE_DIR="/tmp/smithy-benchmarks" +OUTPUT_DIR="" + +usage() { + sed -n '3,/^$/s/^# //p' "$0" + exit 1 +} + +[[ $# -lt 1 || "$1" == "-h" || "$1" == "--help" ]] && usage +SSH_HOST="$1"; shift + +while [[ $# -gt 0 ]]; do + case "$1" in + --fast) FAST=true; shift ;; + --includes) INCLUDES="$2"; shift 2 ;; + --test-case-id) TEST_CASE_ID="$2"; shift 2 ;; + --profilers) PROFILERS="$2"; shift 2 ;; + --skip-build) SKIP_BUILD=true; shift ;; + --remote-java) REMOTE_JAVA="$2"; shift 2 ;; + --remote-dir) REMOTE_DIR="$2"; shift 2 ;; + --output-dir) OUTPUT_DIR="$2"; shift 2 ;; + -h|--help) usage ;; + *) echo "Unknown option: $1" >&2; usage ;; + esac +done + +# --- Build locally --- +if [[ "$SKIP_BUILD" == false ]]; then + echo "==> Building JMH jar..." + "$PROJECT_ROOT/gradlew" -p "$PROJECT_ROOT" :benchmarks:serde-benchmarks:jmhJar -q +fi + +JAR=$(ls "$JAR_DIR"/*-jmh.jar 2>/dev/null | head -1) +if [[ -z "$JAR" ]]; then + echo "ERROR: No JMH jar found in $JAR_DIR" >&2 + echo "Run without --skip-build or build with: ./gradlew :benchmarks:serde-benchmarks:jmhJar" >&2 + exit 1 +fi +JAR_NAME=$(basename "$JAR") +echo "==> Using jar: $JAR_NAME" + +# --- Copy jar to remote --- +echo "==> Copying jar to $SSH_HOST:$REMOTE_DIR/" +ssh "$SSH_HOST" "mkdir -p $REMOTE_DIR" +scp -q "$JAR" "$SSH_HOST:$REMOTE_DIR/$JAR_NAME" + +# --- Build JMH CLI args --- +JVM_ARGS="-Xms1g -Xmx1g -XX:+UseG1GC -XX:+AlwaysPreTouch -Dsmithy-java.json-provider=smithy" + +JMH_ARGS="-bm sample -tu ns -f 1 -rf json -rff $REMOTE_DIR/results.json" +JMH_ARGS="$JMH_ARGS -jvmArgs \"$JVM_ARGS\"" +if [[ "$FAST" == true ]]; then + JMH_ARGS="$JMH_ARGS -wi 1 -w 5s -i 3 -r 5s" +else + JMH_ARGS="$JMH_ARGS -wi 5 -w 2s -i 10 -r 5s" +fi + +[[ -n "$INCLUDES" ]] && JMH_ARGS="$JMH_ARGS $INCLUDES" +[[ -n "$TEST_CASE_ID" ]] && JMH_ARGS="$JMH_ARGS -p testCaseId=$TEST_CASE_ID" +[[ -n "$PROFILERS" ]] && JMH_ARGS="$JMH_ARGS -prof $PROFILERS" + +# --- Run benchmarks on remote --- +echo "==> Running benchmarks on $SSH_HOST..." +echo " $REMOTE_JAVA -jar $JAR_NAME $JMH_ARGS" +ssh "$SSH_HOST" "$REMOTE_JAVA -jar $REMOTE_DIR/$JAR_NAME $JMH_ARGS" + +# --- Run converter on remote --- +echo "==> Converting results on $SSH_HOST..." +ssh "$SSH_HOST" "$REMOTE_JAVA -cp $REMOTE_DIR/$JAR_NAME \ + software.amazon.smithy.java.benchmarks.serde.JmhResultConverter \ + --input $REMOTE_DIR/results.json \ + --output-prefix $REMOTE_DIR/output" + +# --- Copy results back --- +DEST="${OUTPUT_DIR:-$LOCAL_RESULTS}" +echo "==> Copying results to $DEST..." +mkdir -p "$DEST" +scp -q "$SSH_HOST:$REMOTE_DIR/results.json" "$DEST/results.json" +scp -q "$SSH_HOST:$REMOTE_DIR/output.json" "$DEST/output.json" +scp -q "$SSH_HOST:$REMOTE_DIR/output.md" "$DEST/output.md" + +echo "" +echo "Results:" +echo " JSON: $DEST/output.json" +echo " Markdown: $DEST/output.md" +echo " Raw JMH: $DEST/results.json" \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index b5059c916..d3838f6b0 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -100,7 +100,6 @@ include(":aws:sdkv2:aws-sdkv2-auth") // Examples include(":examples") include(":examples:basic-server") -include(":examples:dynamodb-client") include(":examples:transcribestreaming-client") include(":examples:end-to-end") include(":examples:event-streaming-client")