/* Ċ Ġ* ĠCopyright ĠAmazon . com , ĠInc . Ġor Ġits Ġaffiliates . ĠAll ĠRights ĠReserved . Ċ Ġ* ĠSPDX - License - Identifier : ĠApache - 2 . 0 . Ċ Ġ*/ Ċ Ċ package Ġaws . sdk . kotlin . runtime . http . operation Ċ Ċ import Ġaws . sdk . kotlin . runtime . Internal Sdk Api Ċ import Ġaws . smithy . kotlin . runtime . client . ExecutionContext Ċ import Ġaws . smithy . kotlin . runtime . util . Attribute Key Ċ Ċ /** Ċ Ġ* ĠOperation Ġcontext Ġelement Ġfor Ġadding Ġadditional Ġmetadata Ġto Ġthe Ġ` User - Agent ` Ġheader Ġstring . Ċ Ġ* Ċ Ġ* ĠAccess Ġvia Ġextension Ġproperty Ġ[ ExecutionContext . custom UserAgent Metadata ] Ċ Ġ*/ Ċ public Ġclass ĠCustom UserAgent Metadata Ġ{ ĊĠĠĠ Ġinternal Ġval Ġextras : ĠMutable Map < String , ĠString > Ġ= Ġmutable Map Of () ĊĠĠĠ Ġinternal Ġval Ġtyped Extras : ĠMutable List < Typed UserAgent Metadata > Ġ= Ġmutable ListOf () ĊĊĠĠĠ Ġinternal Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġpublic Ġval ĠContext Key : ĠAttribute Key < Custom UserAgent Metadata > Ġ= ĠAttribute Key (" Custom UserAgent Metadata ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd Ġadditional Ġkey - value Ġpairs Ġof Ġmetadata Ġto Ġthe Ġrequest . ĠThese Ġwill Ġshow Ġup Ġas Ġ` md / key / value ` Ġwhen Ġsent . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġadd ( key : ĠString , Ġvalue : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġextras [ key ] Ġ= Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Internal Sdk Api ĊĠĠĠ Ġpublic Ġfun Ġadd ( metadata : ĠTyped UserAgent Metadata ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtyped Extras . add ( metadata ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠGet Ġthe Ġ[ Custom UserAgent Metadata ] Ġinstance Ġto Ġappend Ġadditional Ġcontext Ġto Ġthe Ġgenerated Ġ` User - Agent ` Ġstring . Ċ Ġ*/ Ċ public Ġval ĠExecutionContext . custom UserAgent Metadata : ĠCustom UserAgent Metadata ĊĠĠĠ Ġget () Ġ= Ġcompute If Absent ( Custom UserAgent Metadata . Context Key ) Ġ{ ĠCustom UserAgent Metadata () Ġ} Ċ Ċ /** Ċ Ġ* ĠMarker Ġinterface Ġfor Ġaddition Ġof Ġclass ified Ġmetadata Ġtypes Ġ( e . g . Ġ[ Config Metadata ] Ġor Ġ[ Feature Metadata ]). Ċ Ġ*/ Ċ @ Internal Sdk Api Ċ public Ġsealed Ġinterface ĠTyped UserAgent Metadata Ċ Ċ /** Ċ Ġ* ĠFeature Ġmetadata Ċ Ġ* Ġ@ property Ġname ĠThe Ġname Ġof Ġthe Ġfeature Ċ Ġ* Ġ@ property Ġversion ĠOptional Ġversion Ġof Ġthe Ġfeature Ġ( if Ġindependently Ġversion ed ) Ċ Ġ*/ Ċ @ Internal Sdk Api Ċ public Ġdata Ġclass ĠFeature Metadata ( val Ġname : ĠString , Ġval Ġversion : ĠString ? Ġ= Ġnull ) Ġ: ĠTyped UserAgent Metadata Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġif Ġ( version Ġ!= Ġnull ) Ġ" ft /$ name /$ version " Ġelse Ġ" ft /$ name " Ċ } Ċ Ċ /** Ċ Ġ* ĠConfiguration Ġmetadata Ċ Ġ* Ġ@ property Ġname ĠThe Ġconfiguration Ġproperty Ġname Ġ( e . g . Ġ" retry - mode ") Ċ Ġ* Ġ@ property Ġvalue ĠThe Ġproperty Ġvalue Ġ( e . g . Ġ" standard ") Ċ Ġ*/ Ċ @ Internal Sdk Api Ċ public Ġdata Ġclass ĠConfig Metadata ( val Ġname : ĠString , Ġval Ġvalue : ĠString ) Ġ: ĠTyped UserAgent Metadata Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġwhen Ġ( value . lowercase ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" true " Ġ-> Ġ" cfg /$ name " ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ" cfg /$ name /$ value " ĊĠĠĠ Ġ} Ċ } Ċ