Skip to content

Commit 9c683df

Browse files
Add jsonName trait docs
1 parent 1b446b4 commit 9c683df

File tree

4 files changed

+97
-0
lines changed

4 files changed

+97
-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
@@ -17,6 +17,7 @@
1717
import software.amazon.smithy.docgen.core.interceptors.ExternalDocsInterceptor;
1818
import software.amazon.smithy.docgen.core.interceptors.IdempotencyInterceptor;
1919
import software.amazon.smithy.docgen.core.interceptors.InternalInterceptor;
20+
import software.amazon.smithy.docgen.core.interceptors.JsonNameInterceptor;
2021
import software.amazon.smithy.docgen.core.interceptors.LengthInterceptor;
2122
import software.amazon.smithy.docgen.core.interceptors.NoReplaceBindingInterceptor;
2223
import software.amazon.smithy.docgen.core.interceptors.NoReplaceOperationInterceptor;
@@ -75,6 +76,7 @@ public List<? extends CodeInterceptor<? extends CodeSection, DocWriter>> interce
7576
return List.of(
7677
new OperationAuthInterceptor(),
7778
new ApiKeyAuthInterceptor(),
79+
new JsonNameInterceptor(),
7880
new PaginationInterceptor(),
7981
new RequestCompressionInterceptor(),
8082
new NoReplaceBindingInterceptor(),
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
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 software.amazon.smithy.docgen.core.sections.ProtocolSection;
9+
import software.amazon.smithy.docgen.core.writers.DocWriter;
10+
import software.amazon.smithy.model.shapes.ShapeId;
11+
import software.amazon.smithy.model.traits.JsonNameTrait;
12+
import software.amazon.smithy.utils.SmithyInternalApi;
13+
14+
/**
15+
* Adds a member's <a href="https://smithy.io/2.0/spec/protocol-traits.html#jsonname-trait">
16+
* jsonName</a> to the {@link ProtocolSection} if the protocol supports it.
17+
*/
18+
@SmithyInternalApi
19+
public final class JsonNameInterceptor extends ProtocolTraitInterceptor<JsonNameTrait> {
20+
21+
@Override
22+
protected Class<JsonNameTrait> getTraitClass() {
23+
return JsonNameTrait.class;
24+
}
25+
26+
@Override
27+
protected ShapeId getTraitId() {
28+
return JsonNameTrait.ID;
29+
}
30+
31+
@Override
32+
public void write(DocWriter writer, String previousText, ProtocolSection section, JsonNameTrait trait) {
33+
writer.putContext("jsonKeyName", "JSON key name:");
34+
writer.write("""
35+
${jsonKeyName:B} $`
36+
37+
$L""", trait.getValue(), previousText);
38+
}
39+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
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 software.amazon.smithy.docgen.core.sections.ProtocolSection;
9+
import software.amazon.smithy.docgen.core.writers.DocWriter;
10+
import software.amazon.smithy.model.shapes.ShapeId;
11+
import software.amazon.smithy.model.traits.ProtocolDefinitionTrait;
12+
import software.amazon.smithy.model.traits.Trait;
13+
import software.amazon.smithy.utils.CodeInterceptor;
14+
15+
/**
16+
* Implements an interceptor that adds protocol trait documentation.
17+
*
18+
* @param <T> The class of the protocol trait.
19+
*/
20+
abstract class ProtocolTraitInterceptor<T extends Trait> implements CodeInterceptor<ProtocolSection, DocWriter> {
21+
22+
/**
23+
* @return returns the class of the protocol trait.
24+
*/
25+
protected abstract Class<T> getTraitClass();
26+
27+
/**
28+
* @return returns the shape id of the protocol trait.
29+
*/
30+
protected abstract ShapeId getTraitId();
31+
32+
@Override
33+
public boolean isIntercepted(ProtocolSection section) {
34+
if (section.shape().getMemberTrait(section.context().model(), getTraitClass()).isEmpty()) {
35+
return false;
36+
}
37+
var protocolShape = section.context().model().expectShape(section.protocol());
38+
var protocolDefinition = protocolShape.expectTrait(ProtocolDefinitionTrait.class);
39+
return protocolDefinition.getTraits().contains(getTraitId());
40+
}
41+
42+
@Override
43+
public Class<ProtocolSection> sectionType() {
44+
return ProtocolSection.class;
45+
}
46+
47+
@Override
48+
public void write(DocWriter writer, String previousText, ProtocolSection section) {
49+
var trait = section.shape().getMemberTrait(section.context().model(), getTraitClass()).get();
50+
write(writer, previousText, section, trait);
51+
}
52+
53+
abstract void write(DocWriter writer, String previousText, ProtocolSection section, T trait);
54+
}

smithy-docgen-test/model/main.smithy

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,8 @@ structure DocumentedStructure {
116116
/// This is a simple string member.
117117
/// It has documentation that can span multiple lines.
118118
@since("2023-11-16")
119+
@jsonName("foo")
120+
@xmlName("bar")
119121
string: String
120122

121123
/// This member has a pattern trait on it.

0 commit comments

Comments
 (0)