@@ -1010,30 +1010,53 @@ private void writeNormalHeader(GenerationContext context, HttpBinding binding) {
1010
1010
binding .getMember (),
1011
1011
target
1012
1012
);
1013
+ boolean isIdempotencyToken = binding .getMember ().hasTrait (IdempotencyTokenTrait .class );
1014
+ if (isIdempotencyToken ) {
1015
+ context .getWriter ()
1016
+ .addImport ("v4" , "generateIdempotencyToken" , TypeScriptDependency .UUID );
1017
+ }
1018
+
1019
+ boolean headerAssertion = headerValue .endsWith ("!" );
1020
+ String headerBaseValue = (headerAssertion
1021
+ ? headerValue .substring (0 , headerValue .length () - 1 )
1022
+ : headerValue );
1013
1023
1014
1024
if (!Objects .equals (memberLocation + "!" , headerValue )) {
1015
1025
String defaultValue = "" ;
1016
1026
if (headerBuffer .containsKey (headerKey )) {
1017
1027
String s = headerBuffer .get (headerKey );
1018
1028
defaultValue = " || " + s .substring (s .indexOf (": " ) + 2 , s .length () - 1 );
1029
+ } else if (isIdempotencyToken ) {
1030
+ defaultValue = " ?? generateIdempotencyToken()" ;
1019
1031
}
1032
+
1033
+ String headerValueExpression = headerAssertion && !defaultValue .isEmpty ()
1034
+ ? headerBaseValue + defaultValue
1035
+ : headerValue + defaultValue ;
1036
+
1020
1037
// evaluated value has a function or method call attached
1021
1038
headerBuffer .put (headerKey , String .format (
1022
1039
"[%s]: [() => isSerializableHeaderValue(%s), () => %s]," ,
1023
1040
context .getStringStore ().var (headerKey ),
1024
1041
memberLocation + defaultValue ,
1025
- headerValue + defaultValue
1042
+ headerValueExpression
1026
1043
));
1027
1044
} else {
1028
- String value = headerValue ;
1045
+ String constructedHeaderValue = (headerAssertion
1046
+ ? headerBaseValue
1047
+ : headerValue );
1029
1048
if (headerBuffer .containsKey (headerKey )) {
1030
1049
String s = headerBuffer .get (headerKey );
1031
- value = headerValue + " || " + s .substring (s .indexOf (": " ) + 2 , s .length () - 1 );
1050
+ constructedHeaderValue += " || " + s .substring (s .indexOf (": " ) + 2 , s .length () - 1 );
1051
+ } else if (isIdempotencyToken ) {
1052
+ constructedHeaderValue += " ?? generateIdempotencyToken()" ;
1053
+ } else {
1054
+ constructedHeaderValue = headerValue ;
1032
1055
}
1033
1056
headerBuffer .put (headerKey , String .format (
1034
1057
"[%s]: %s," ,
1035
1058
context .getStringStore ().var (headerKey ),
1036
- value
1059
+ constructedHeaderValue
1037
1060
));
1038
1061
}
1039
1062
}
0 commit comments