@@ -202,6 +202,10 @@ public void generateSharedComponents(GenerationContext context) {
202
202
HttpProtocolGeneratorUtils .generateMetadataDeserializer (context , getApplicationProtocol ().getResponseType ());
203
203
HttpProtocolGeneratorUtils .generateCollectBodyString (context );
204
204
HttpProtocolGeneratorUtils .generateHttpBindingUtils (context );
205
+
206
+ writer .write (
207
+ context .getStringStore ().flushVariableDeclarationCode ()
208
+ );
205
209
}
206
210
207
211
@ Override
@@ -673,7 +677,9 @@ private void generateOperationRequestSerializer(
673
677
// Get the hostname, path, port, and scheme from client's resolved endpoint.
674
678
// Then construct the request from them. The client's resolved endpoint can
675
679
// be default one or supplied by users.
676
- writer .write ("const {hostname, protocol = $S, port, path: basePath} = await context.endpoint();" , "https" );
680
+
681
+ writer .addImport ("requestBuilder" , "rb" , TypeScriptDependency .SMITHY_CORE );
682
+ writer .write ("const b = rb(input, context);" );
677
683
678
684
writeRequestHeaders (context , operation , bindingIndex );
679
685
writeResolvedPath (context , operation , bindingIndex , trait );
@@ -692,24 +698,17 @@ private void generateOperationRequestSerializer(
692
698
boolean hasHostPrefix = operation .hasTrait (EndpointTrait .class );
693
699
if (hasHostPrefix ) {
694
700
HttpProtocolGeneratorUtils .writeHostPrefix (context , operation );
701
+ writer .write ("b.hn(resolvedHostname);" );
695
702
}
696
- writer .openBlock ("return new $T({" , "});" , requestType , () -> {
697
- writer .write ("protocol," );
698
- if (hasHostPrefix ) {
699
- writer .write ("hostname: resolvedHostname," );
700
- } else {
701
- writer .write ("hostname," );
702
- }
703
- writer .write ("port," );
704
- writer .write ("method: $S," , trait .getMethod ());
705
- writer .write ("headers," );
706
- writer .write ("path: resolvedPath," );
707
- if (hasQueryComponents ) {
708
- writer .write ("query," );
709
- }
710
- // Always set the body,
711
- writer .write ("body," );
712
- });
703
+ writer .write ("b.m($S)" , trait .getMethod ());
704
+ writer .write (".h(headers)" );
705
+ if (hasQueryComponents ) {
706
+ writer .write (".q(query)" );
707
+ }
708
+ // Always set the body,
709
+ writer .write (".b(body);" );
710
+
711
+ writer .write ("return b.build();" );
713
712
});
714
713
715
714
writer .write ("" );
@@ -762,8 +761,7 @@ private void writeResolvedPath(
762
761
: Collections .emptyMap ();
763
762
764
763
// Always write the bound path, but only the actual segments.
765
- writer .write ("let resolvedPath = `$L` + $S;" ,
766
- "${basePath?.endsWith('/') ? basePath.slice(0, -1) : (basePath || '')}" ,
764
+ writer .write ("b.bp(\" $L\" );" ,
767
765
"/" + trait .getUri ().getSegments ().stream ()
768
766
.filter (segment -> {
769
767
if (!useEndpointsV2 ) {
@@ -804,7 +802,7 @@ private void writeResolvedPath(
804
802
805
803
// Get the correct label to use.
806
804
Segment uriLabel = uriLabels .stream ().filter (s -> s .getContent ().equals (memberName )).findFirst ().get ();
807
- writer .write ("resolvedPath = __resolvedPath(resolvedPath, input, '$L', $L, '$L', $L)" ,
805
+ writer .write ("b.p( '$L', $L, '$L', $L)" ,
808
806
memberName ,
809
807
labelValueProvider ,
810
808
uriLabel .toString (),
@@ -830,7 +828,7 @@ private boolean writeRequestQueryString(
830
828
writer .openBlock ("const query: any = map({" , "});" , () -> {
831
829
if (!queryLiterals .isEmpty ()) {
832
830
// Write any query literals present in the uri.
833
- queryLiterals .forEach ((k , v ) -> writer .write ("$S : [, $S]," , k , v ));
831
+ queryLiterals .forEach ((k , v ) -> writer .write ("[$L] : [, $S]," , context . getStringStore (). var ( k ) , v ));
834
832
}
835
833
// Handle any additional query params bindings.
836
834
// If query string parameter is also present in httpQuery, it would be overwritten.
@@ -879,36 +877,45 @@ private void writeRequestQueryParam(
879
877
String queryValue = getInputValue (
880
878
context ,
881
879
binding .getLocation (),
882
- "input. " + memberName + memberAssertionComponent ,
880
+ "input[ " + context . getStringStore (). var ( memberName ) + "]" + memberAssertionComponent ,
883
881
binding .getMember (),
884
882
target
885
883
);
886
884
885
+ String simpleAccessExpression = "input["
886
+ + context .getStringStore ().var (memberName )
887
+ + "]" + memberAssertionComponent ;
888
+
889
+ boolean isSimpleAccessExpression = Objects .equals (
890
+ simpleAccessExpression ,
891
+ queryValue
892
+ );
893
+
887
894
writer .addImport ("expectNonNull" , "__expectNonNull" , TypeScriptDependency .AWS_SMITHY_CLIENT );
888
895
889
- if (Objects . equals ( "input." + memberName + memberAssertionComponent , queryValue ) ) {
896
+ if (isSimpleAccessExpression ) {
890
897
String value = isRequired ? "__expectNonNull($L, `" + memberName + "`)" : "$L" ;
891
898
// simple undefined check
892
899
writer .write (
893
- "$S : [," + value + idempotencyComponent + "]," ,
894
- binding .getLocationName (),
900
+ "[$L] : [," + value + idempotencyComponent + "]," ,
901
+ context . getStringStore (). var ( binding .getLocationName () ),
895
902
queryValue
896
903
);
897
904
} else {
898
905
if (isRequired ) {
899
906
// __expectNonNull is immediately invoked and not inside a function.
900
907
writer .write (
901
- "$S : [__expectNonNull(input.$L, `$L`) != null, () => $L]," ,
902
- binding .getLocationName (),
908
+ "[$L] : [__expectNonNull(input.$L, `$L`) != null, () => $L]," ,
909
+ context . getStringStore (). var ( binding .getLocationName () ),
903
910
memberName ,
904
911
memberName ,
905
912
queryValue // no idempotency token default for required members
906
913
);
907
914
} else {
908
915
// undefined check with lazy eval
909
916
writer .write (
910
- "$S : [() => input.$L !== void 0, () => ($L)$L]," ,
911
- binding .getLocationName (),
917
+ "[$L] : [() => input.$L !== void 0, () => ($L)$L]," ,
918
+ context . getStringStore (). var ( binding .getLocationName () ),
912
919
memberName ,
913
920
queryValue ,
914
921
idempotencyComponent
@@ -976,7 +983,9 @@ private void writeRequestHeaders(
976
983
}
977
984
978
985
private void writeNormalHeader (GenerationContext context , HttpBinding binding ) {
979
- String memberLocation = "input." + context .getSymbolProvider ().toMemberName (binding .getMember ());
986
+ String memberLocation = "input["
987
+ + context .getStringStore ().var (context .getSymbolProvider ().toMemberName (binding .getMember ()))
988
+ + "]" ;
980
989
Shape target = context .getModel ().expectShape (binding .getMember ().getTarget ());
981
990
982
991
String headerKey = binding .getLocationName ().toLowerCase (Locale .US );
@@ -996,8 +1005,8 @@ private void writeNormalHeader(GenerationContext context, HttpBinding binding) {
996
1005
}
997
1006
// evaluated value has a function or method call attached
998
1007
headerBuffer .put (headerKey , String .format (
999
- "'%s' : [() => isSerializableHeaderValue(%s), () => %s]," ,
1000
- headerKey ,
1008
+ "[%s] : [() => isSerializableHeaderValue(%s), () => %s]," ,
1009
+ context . getStringStore (). var ( headerKey ) ,
1001
1010
memberLocation + defaultValue ,
1002
1011
headerValue + defaultValue
1003
1012
));
@@ -1008,8 +1017,8 @@ private void writeNormalHeader(GenerationContext context, HttpBinding binding) {
1008
1017
value = headerValue + " || " + s .substring (s .indexOf (": " ) + 2 , s .length () - 1 );
1009
1018
}
1010
1019
headerBuffer .put (headerKey , String .format (
1011
- "'%s' : %s," ,
1012
- headerKey ,
1020
+ "[%s] : %s," ,
1021
+ context . getStringStore (). var ( headerKey ) ,
1013
1022
value
1014
1023
));
1015
1024
}
@@ -2231,14 +2240,20 @@ private void readNormalHeaders(
2231
2240
String memberName = context .getSymbolProvider ().toMemberName (binding .getMember ());
2232
2241
String headerName = binding .getLocationName ().toLowerCase (Locale .US );
2233
2242
Shape target = context .getModel ().expectShape (binding .getMember ().getTarget ());
2234
- String headerValue = getOutputValue (context , binding .getLocation (),
2235
- outputName + ".headers['" + headerName + "']" , binding .getMember (), target );
2236
- String checkedValue = outputName + ".headers['" + headerName + "']" ;
2243
+ String headerValue = getOutputValue (
2244
+ context , binding .getLocation (),
2245
+ outputName + ".headers[" + context .getStringStore ().var (headerName ) + "]" ,
2246
+ binding .getMember (), target
2247
+ );
2248
+ String checkedValue = outputName + ".headers[" + context .getStringStore ().var (headerName ) + "]" ;
2237
2249
2238
2250
if (checkedValue .equals (headerValue )) {
2239
- writer .write ("$L : [, $L]," , memberName , headerValue );
2251
+ writer .write ("[$L] : [, $L]," , context . getStringStore (). var ( memberName ) , headerValue );
2240
2252
} else {
2241
- writer .write ("$L: [() => void 0 !== $L, () => $L]," , memberName , checkedValue , headerValue );
2253
+ writer .write (
2254
+ "[$L]: [() => void 0 !== $L, () => $L]," ,
2255
+ context .getStringStore ().var (memberName ), checkedValue , headerValue
2256
+ );
2242
2257
}
2243
2258
}
2244
2259
}
0 commit comments