/* Ċ Ġ* ĠCopyright ĠAmazon . com , ĠInc . Ġor Ġits Ġaffiliates . ĠAll ĠRights ĠReserved . Ċ Ġ* ĠSPDX - License - Identifier : ĠApache - 2 . 0 . Ċ Ġ*/ Ċ Ċ package Ġaws . smithy . kotlin . runtime . http . middleware Ċ Ċ import Ġaws . smithy . kotlin . runtime . http . operation .* Ċ import Ġaws . smithy . kotlin . runtime . util . Internal Api Ċ Ċ /** Ċ Ġ* Ġ ĠHttp Ġmiddleware Ġfor Ġresolving Ġthe Ġservice Ġendpoint . Ċ Ġ*/ Ċ @ Internal Api Ċ class ĠResolve Endpoint ( ĊĠĠĠ Ġprivate Ġval Ġresolver : ĠEndpoint Resolver Ċ ) Ġ: ĠModify Request Middleware Ġ{ ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġmodify Request ( req : ĠS dk HttpRequest ): ĠS dk HttpRequest Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġendpoint Ġ= Ġresolver . resolve () ĊĠĠĠĠĠĠĠ Ġset Request Endpoint ( req , Ġendpoint ) ĊĠĠĠĠĠĠĠ Ġval Ġlogger Ġ= Ġreq . context . getLogger (" Resolve Endpoint ") ĊĠĠĠĠĠĠĠ Ġlogger . debug Ġ{ Ġ" resolved Ġendpoint : Ġ$ endpoint " Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġreq ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠPopulate Ġthe Ġrequest ĠURL Ġparameters Ġfrom Ġa Ġresolved Ġendpoint Ċ Ġ*/ Ċ @ Internal Api Ċ fun Ġset Request Endpoint ( req : ĠS dk HttpRequest , Ġendpoint : ĠEndpoint ) Ġ{ ĊĠĠĠ Ġval Ġhost Prefix Ġ= Ġreq . context . get OrNull ( Http Operation Context . Host Prefix ) ĊĠĠĠ Ġval Ġhostname Ġ= Ġif Ġ( host Prefix Ġ!= Ġnull ) Ġ"${ host Prefix }${ endpoint . uri . host }" Ġelse Ġendpoint . uri . host ĊĠĠĠ Ġreq . subject . url . scheme Ġ= Ġendpoint . uri . scheme ĊĠĠĠ Ġreq . subject . url . host Ġ= Ġhostname ĊĠĠĠ Ġreq . subject . url . port Ġ= Ġendpoint . uri . port ĊĠĠĠ Ġreq . subject . headers [" Host "] Ġ= Ġhostname ĊĠĠĠ Ġif Ġ( endpoint . uri . path . isNotBlank ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġop Path Ġ= Ġreq . subject . url . path ĊĠĠĠĠĠĠĠ Ġval Ġendpoint Path Ġ= Ġendpoint . uri . path . remove Suffix ("/") ĊĠĠĠĠĠĠĠ Ġreq . subject . url . path Ġ= Ġif Ġ( op Path . isNotBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ endpoint Path /${ op Path . remove Prefix ("/") }" ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġkeep Ġendpoint Ġpath Ġas Ġis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġendpoint . uri . path ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreq . subject . url . parameters . append All ( endpoint . uri . parameters ) Ċ } Ċ