@@ -1010,30 +1010,53 @@ private void writeNormalHeader(GenerationContext context, HttpBinding binding) {
10101010 binding .getMember (),
10111011 target
10121012 );
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 );
10131023
10141024 if (!Objects .equals (memberLocation + "!" , headerValue )) {
10151025 String defaultValue = "" ;
10161026 if (headerBuffer .containsKey (headerKey )) {
10171027 String s = headerBuffer .get (headerKey );
10181028 defaultValue = " || " + s .substring (s .indexOf (": " ) + 2 , s .length () - 1 );
1029+ } else if (isIdempotencyToken ) {
1030+ defaultValue = " ?? generateIdempotencyToken()" ;
10191031 }
1032+
1033+ String headerValueExpression = headerAssertion && !defaultValue .isEmpty ()
1034+ ? headerBaseValue + defaultValue
1035+ : headerValue + defaultValue ;
1036+
10201037 // evaluated value has a function or method call attached
10211038 headerBuffer .put (headerKey , String .format (
10221039 "[%s]: [() => isSerializableHeaderValue(%s), () => %s]," ,
10231040 context .getStringStore ().var (headerKey ),
10241041 memberLocation + defaultValue ,
1025- headerValue + defaultValue
1042+ headerValueExpression
10261043 ));
10271044 } else {
1028- String value = headerValue ;
1045+ String constructedHeaderValue = (headerAssertion
1046+ ? headerBaseValue
1047+ : headerValue );
10291048 if (headerBuffer .containsKey (headerKey )) {
10301049 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 ;
10321055 }
10331056 headerBuffer .put (headerKey , String .format (
10341057 "[%s]: %s," ,
10351058 context .getStringStore ().var (headerKey ),
1036- value
1059+ constructedHeaderValue
10371060 ));
10381061 }
10391062 }
0 commit comments