Skip to content

Commit fd61cd3

Browse files
committed
wip: writerConsumers for plugins
1 parent 3b45fba commit fd61cd3

File tree

4 files changed

+65
-0
lines changed

4 files changed

+65
-0
lines changed

smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/CommandGenerator.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -467,6 +467,7 @@ private void addCommandSpecificPlugins() {
467467
// applied automatically when the Command's middleware stack is copied from
468468
// the service's middleware stack.
469469
for (RuntimeClientPlugin plugin : runtimePlugins) {
470+
plugin.getWriterConsumer().accept(writer);
470471
plugin.getPluginFunction().ifPresent(pluginSymbol -> {
471472
// Construct additional parameters string
472473
Map<String, Object> paramsMap = plugin.getAdditionalPluginFunctionParameters(

smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/ServiceBareBonesClientGenerator.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,6 +387,10 @@ private void generateConstructor() {
387387
generateConfigVariable(configVariable - 1));
388388
}
389389

390+
for (RuntimeClientPlugin plugin : runtimePlugins) {
391+
plugin.getWriterConsumer().accept(writer);
392+
}
393+
390394
// Add runtime plugin "resolve" method calls. These are invoked one
391395
// after the other until all of the runtime plugins have been called.
392396
// Only plugins that have configuration are called. Each time the

smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/auth/http/integration/AddHttpAuthSchemePlugin.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,12 @@ public List<RuntimeClientPlugin> getClientPlugins() {
6767
.name("this.getIdentityProviderConfigProvider()")
6868
.build()
6969
))
70+
.withWriter(writer -> {
71+
String httpAuthSchemeParametersProviderName = "default"
72+
+ CodegenUtils.getServiceName(s.getSettings(), s.getModel(), s.getSymbolProvider())
73+
+ "HttpAuthSchemeParametersProvider";
74+
w.addImport(httpAuthSchemeParametersProviderName, null, AuthUtils.AUTH_HTTP_PROVIDER_DEPENDENCY);
75+
})
7076
.build(),
7177
RuntimeClientPlugin.builder()
7278
.servicePredicate((m, s) -> !s.hasTrait(EndpointRuleSetTrait.ID))
@@ -217,6 +223,14 @@ public void customize(TypeScriptCodegenContext codegenContext) {
217223
});
218224
}
219225

226+
private String inlineHttpAuthSchemeParametersProvider() {
227+
return "";
228+
}
229+
230+
private String inlineIdentityProviderConfigProvider() {
231+
return "";
232+
}
233+
220234
/*
221235
export interface HttpAuthSchemeInputConfig {
222236
httpAuthSchemes?: HttpAuthScheme[];

smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/integration/RuntimeClientPlugin.java

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,11 @@
2020
import java.util.Objects;
2121
import java.util.Optional;
2222
import java.util.Set;
23+
import java.util.function.BiConsumer;
2324
import java.util.function.BiPredicate;
25+
import java.util.function.Consumer;
26+
import java.util.function.UnaryOperator;
27+
2428
import software.amazon.smithy.codegen.core.Symbol;
2529
import software.amazon.smithy.codegen.core.SymbolDependency;
2630
import software.amazon.smithy.codegen.core.SymbolReference;
@@ -29,10 +33,12 @@
2933
import software.amazon.smithy.model.shapes.ServiceShape;
3034
import software.amazon.smithy.typescript.codegen.TypeScriptDependency;
3135
import software.amazon.smithy.typescript.codegen.TypeScriptSettings;
36+
import software.amazon.smithy.typescript.codegen.TypeScriptWriter;
3237
import software.amazon.smithy.utils.SmithyBuilder;
3338
import software.amazon.smithy.utils.SmithyUnstableApi;
3439
import software.amazon.smithy.utils.StringUtils;
3540
import software.amazon.smithy.utils.ToSmithyBuilder;
41+
import software.amazon.smithy.utils.TriConsumer;
3642

3743
/**
3844
* Represents a runtime plugin for a client that hooks into various aspects
@@ -56,6 +62,8 @@ public final class RuntimeClientPlugin implements ToSmithyBuilder<RuntimeClientP
5662
private final BiPredicate<Model, ServiceShape> servicePredicate;
5763
private final OperationPredicate operationPredicate;
5864
private final SettingsPredicate settingsPredicate;
65+
private BiConsumer<TypeScriptWriter, BiConsumer<Model, ServiceShape>> clientWriterConsumer = (writer, consumer) -> {};
66+
private BiConsumer<TypeScriptWriter, TriConsumer<Model, ServiceShape, OperationShape>> operationWriterConsumer = (writer, consumer) -> {};
5967

6068
private RuntimeClientPlugin(Builder builder) {
6169
inputConfig = builder.inputConfig;
@@ -68,6 +76,8 @@ private RuntimeClientPlugin(Builder builder) {
6876
operationPredicate = builder.operationPredicate;
6977
servicePredicate = builder.servicePredicate;
7078
settingsPredicate = builder.settingsPredicate;
79+
clientWriterConsumer = builder.clientWriterConsumer;
80+
operationWriterConsumer = builder.operationWriterConsumer;
7181

7282
boolean allNull = (inputConfig == null) && (resolvedConfig == null) && (resolveFunction == null);
7383
boolean allSet = (inputConfig != null) && (resolvedConfig != null) && (resolveFunction != null);
@@ -326,6 +336,18 @@ public boolean matchesSettings(Model model, ServiceShape service, TypeScriptSett
326336
return settingsPredicate.test(model, service, settings);
327337
}
328338

339+
/**
340+
* @return the writer consumer for this RuntimeClientPlugin. May be used to add imports and dependencies
341+
* used by this plugin.
342+
*/
343+
public Consumer<TypeScriptWriter> getClientWriterConsumer() {
344+
return this.clientWriterConsumer;
345+
}
346+
347+
public Consumer<TypeScriptWriter> getClientWriterConsumer() {
348+
return this.operationWriterConsumer;
349+
}
350+
329351
public static Builder builder() {
330352
return new Builder();
331353
}
@@ -398,6 +420,8 @@ public static final class Builder implements SmithyBuilder<RuntimeClientPlugin>
398420
private BiPredicate<Model, ServiceShape> servicePredicate = (model, service) -> true;
399421
private OperationPredicate operationPredicate = (model, service, operation) -> false;
400422
private SettingsPredicate settingsPredicate = (model, service, settings) -> true;
423+
private BiConsumer<TypeScriptWriter, BiConsumer<Model, ServiceShape>> clientWriterConsumer = (writer, consumer) -> {};
424+
private BiConsumer<TypeScriptWriter, TriConsumer<Model, ServiceShape, OperationShape>> operationWriterConsumer = (writer, consumer) -> {};
401425

402426
@Override
403427
public RuntimeClientPlugin build() {
@@ -746,6 +770,28 @@ public Builder servicePredicate(BiPredicate<Model, ServiceShape> servicePredicat
746770
return this;
747771
}
748772

773+
/**
774+
* Enables access to the writer for adding imports/dependencies.
775+
*/
776+
public Builder withClientWriter(
777+
BiConsumer<TypeScriptWriter,
778+
BiConsumer<Model, ServiceShape>> clientWriterConsumer
779+
) {
780+
this.clientWriterConsumer = clientWriterConsumer;
781+
return this;
782+
}
783+
784+
/**
785+
* Enables access to the writer for adding imports/dependencies.
786+
*/
787+
public Builder withOperationWriter(
788+
BiConsumer<TypeScriptWriter,
789+
TriConsumer<Model, ServiceShape, OperationShape>> operationWriterConsumer
790+
) {
791+
this.operationWriterConsumer = operationWriterConsumer;
792+
return this;
793+
}
794+
749795
/**
750796
* Configures various aspects of the builder based on naming conventions
751797
* defined by the provided {@link Convention} values.

0 commit comments

Comments
 (0)