Skip to content

Commit 368609d

Browse files
Add request compression information
1 parent ab6fdaf commit 368609d

File tree

3 files changed

+57
-0
lines changed

3 files changed

+57
-0
lines changed

smithy-docgen-core/src/main/java/software/amazon/smithy/docgen/core/integrations/BuiltinsIntegration.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import software.amazon.smithy.docgen.core.interceptors.PatternInterceptor;
2424
import software.amazon.smithy.docgen.core.interceptors.RangeInterceptor;
2525
import software.amazon.smithy.docgen.core.interceptors.RecommendedInterceptor;
26+
import software.amazon.smithy.docgen.core.interceptors.RequestCompressionInterceptor;
2627
import software.amazon.smithy.docgen.core.interceptors.SensitiveInterceptor;
2728
import software.amazon.smithy.docgen.core.interceptors.SinceInterceptor;
2829
import software.amazon.smithy.docgen.core.interceptors.SparseInterceptor;
@@ -69,6 +70,7 @@ public List<? extends CodeInterceptor<? extends CodeSection, DocWriter>> interce
6970
// the ones at the end will be at the top of the rendered pages. Therefore, interceptors
7071
// that provide more critical information should appear at the bottom of this list.
7172
return List.of(
73+
new RequestCompressionInterceptor(),
7274
new NoReplaceBindingInterceptor(),
7375
new NoReplaceOperationInterceptor(),
7476
new SparseInterceptor(),
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/*
2+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package software.amazon.smithy.docgen.core.interceptors;
7+
8+
import java.util.Optional;
9+
import software.amazon.smithy.docgen.core.sections.ShapeDetailsSection;
10+
import software.amazon.smithy.docgen.core.writers.DocWriter;
11+
import software.amazon.smithy.docgen.core.writers.DocWriter.AdmonitionType;
12+
import software.amazon.smithy.model.traits.RequestCompressionTrait;
13+
import software.amazon.smithy.utils.CodeInterceptor;
14+
import software.amazon.smithy.utils.SmithyInternalApi;
15+
16+
/**
17+
* Adds information about request compression to operations with the
18+
* <a href="https://smithy.io/2.0/spec/behavior-traits.html#requestcompression-trait">
19+
* requestCompression trait</a>.
20+
*/
21+
@SmithyInternalApi
22+
public final class RequestCompressionInterceptor implements CodeInterceptor<ShapeDetailsSection, DocWriter> {
23+
@Override
24+
public Class<ShapeDetailsSection> sectionType() {
25+
return ShapeDetailsSection.class;
26+
}
27+
28+
@Override
29+
public boolean isIntercepted(ShapeDetailsSection section) {
30+
return section.shape().hasTrait(RequestCompressionTrait.class);
31+
}
32+
33+
@Override
34+
public void write(DocWriter writer, String previousText, ShapeDetailsSection section) {
35+
var trait = section.shape().expectTrait(RequestCompressionTrait.class);
36+
writer.openAdmonition(AdmonitionType.IMPORTANT);
37+
38+
// Have particular support for single-element lists.
39+
writer.putContext("encoding", trait.getEncodings().size() == 1
40+
? Optional.of(trait.getEncodings().get(0))
41+
: Optional.empty());
42+
writer.putContext("encodings", trait.getEncodings());
43+
44+
writer.write("""
45+
This operation supports optional request compression using \
46+
${?encoding}${encoding:L} encoding.${/encoding}\
47+
${^encoding}one of the following priority-ordered encodings: \
48+
${#encodings}${value:L}${^key.last}, ${/key.last}${/encodings}.${/encoding}""");
49+
writer.closeAdmonition();
50+
writer.writeWithNoFormatting(previousText);
51+
}
52+
}

smithy-docgen-test/model/main.smithy

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@ service DocumentedService {
4545
}
4646
]
4747
)
48+
@requestCompression(
49+
encodings: ["gzip"]
50+
)
4851
operation DocumentedOperation {
4952
input := {
5053
/// This is an idempotency token, which will inherently mark this operation

0 commit comments

Comments
 (0)