forked from smithy-lang/smithy-rs
-
Notifications
You must be signed in to change notification settings - Fork 0
/
RequiredCustomizations.kt
90 lines (78 loc) · 4.41 KB
/
RequiredCustomizations.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/*
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0
*/
package software.amazon.smithy.rust.codegen.client.smithy.customize
import software.amazon.smithy.model.shapes.OperationShape
import software.amazon.smithy.rust.codegen.client.smithy.ClientCodegenContext
import software.amazon.smithy.rust.codegen.client.smithy.ClientRustModule
import software.amazon.smithy.rust.codegen.client.smithy.customizations.EndpointPrefixGenerator
import software.amazon.smithy.rust.codegen.client.smithy.customizations.HttpChecksumRequiredGenerator
import software.amazon.smithy.rust.codegen.client.smithy.customizations.HttpVersionListCustomization
import software.amazon.smithy.rust.codegen.client.smithy.customizations.IdempotencyTokenGenerator
import software.amazon.smithy.rust.codegen.client.smithy.customizations.ResiliencyConfigCustomization
import software.amazon.smithy.rust.codegen.client.smithy.customizations.ResiliencyReExportCustomization
import software.amazon.smithy.rust.codegen.client.smithy.featureGatedMetaModule
import software.amazon.smithy.rust.codegen.client.smithy.featureGatedPrimitivesModule
import software.amazon.smithy.rust.codegen.client.smithy.generators.config.ConfigCustomization
import software.amazon.smithy.rust.codegen.core.rustlang.Feature
import software.amazon.smithy.rust.codegen.core.smithy.RustCrate
import software.amazon.smithy.rust.codegen.core.smithy.customizations.AllowLintsCustomization
import software.amazon.smithy.rust.codegen.core.smithy.customizations.CrateVersionCustomization
import software.amazon.smithy.rust.codegen.core.smithy.customizations.pubUseSmithyErrorTypes
import software.amazon.smithy.rust.codegen.core.smithy.customizations.pubUseSmithyPrimitives
import software.amazon.smithy.rust.codegen.core.smithy.customize.OperationCustomization
import software.amazon.smithy.rust.codegen.core.smithy.generators.LibRsCustomization
val TestUtilFeature = Feature("test-util", false, listOf())
/**
* A set of customizations that are included in all protocols.
*
* This exists as a convenient place to gather these modifications, these are not true customizations.
*/
class RequiredCustomizations : ClientCodegenDecorator {
override val name: String = "Required"
override val order: Byte = -1
override fun operationCustomizations(
codegenContext: ClientCodegenContext,
operation: OperationShape,
baseCustomizations: List<OperationCustomization>,
): List<OperationCustomization> =
baseCustomizations +
IdempotencyTokenGenerator(codegenContext, operation) +
EndpointPrefixGenerator(codegenContext, operation) +
HttpChecksumRequiredGenerator(codegenContext, operation) +
HttpVersionListCustomization(codegenContext, operation)
override fun configCustomizations(
codegenContext: ClientCodegenContext,
baseCustomizations: List<ConfigCustomization>,
): List<ConfigCustomization> =
baseCustomizations + ResiliencyConfigCustomization(codegenContext)
override fun libRsCustomizations(
codegenContext: ClientCodegenContext,
baseCustomizations: List<LibRsCustomization>,
): List<LibRsCustomization> =
baseCustomizations + AllowLintsCustomization()
override fun extras(codegenContext: ClientCodegenContext, rustCrate: RustCrate) {
// Add rt-tokio feature for `ByteStream::from_path`
rustCrate.mergeFeature(Feature("rt-tokio", true, listOf("aws-smithy-http/rt-tokio")))
rustCrate.mergeFeature(TestUtilFeature)
// Re-export resiliency types
ResiliencyReExportCustomization(codegenContext.runtimeConfig).extras(rustCrate)
rustCrate.withModule(codegenContext.featureGatedPrimitivesModule()) {
pubUseSmithyPrimitives(codegenContext, codegenContext.model)(this)
if (!codegenContext.settings.codegenConfig.enableNewCrateOrganizationScheme) {
pubUseSmithyErrorTypes(codegenContext)(this)
}
}
if (codegenContext.settings.codegenConfig.enableNewCrateOrganizationScheme) {
rustCrate.withModule(ClientRustModule.Error) {
pubUseSmithyErrorTypes(codegenContext)(this)
}
}
codegenContext.featureGatedMetaModule().also { metaModule ->
rustCrate.withModule(metaModule) {
CrateVersionCustomization.extras(rustCrate, metaModule)
}
}
}
}