/* Ċ Ġ* ĠCopyright ĠAmazon . com , ĠInc . Ġor Ġits Ġaffiliates . ĠAll ĠRights ĠReserved . Ċ Ġ* ĠSPDX - License - Identifier : ĠApache - 2 . 0 . Ċ Ġ*/ Ċ package Ġaws . smithy . kotlin . runtime . serde Ċ Ċ /** Ċ Ġ* ĠThis Ġtag Ġinterface Ġprovides Ġa Ġmechanism Ġto Ġattach Ġtype - specific Ġmetadata Ġto Ġany Ġfield . Ċ Ġ* ĠSee Ġ[ aws . smithy . kotlin . runtime . serde . xml . Xml List ] Ġfor Ġan Ġexample Ġimplementation . Ċ Ġ* Ċ Ġ* ĠFor Ġexample , Ġto Ġspecify Ġthat Ġa Ġlist Ġshould Ġbe Ġserialized Ġin ĠXML Ġsuch Ġthat Ġvalues Ġare Ġwrapped Ċ Ġ* Ġin Ġa Ġtag Ġcalled Ġ" b oo ", Ġpass Ġan Ġinstance Ġof ĠXml List Ġto Ġthe ĠField Descriptor Ġof Ġ` Xml List ( element Name =" b oo ") `. Ċ Ġ*/ Ċ interface ĠField Trait Ċ Ċ /** Ċ Ġ* ĠDen otes Ġthat Ġa ĠMap Ġor ĠList Ġmay Ġcontain Ġnull Ġvalues Ċ Ġ* ĠDetails Ġat Ġhttps :// aw sl abs . github . io / smithy / 1 . 0 / spec / core / type - ref inement - traits . html # sparse - trait Ċ Ġ*/ Ċ object ĠSparse Values Ġ: ĠField Trait Ċ Ċ /** Ċ Ġ* ĠA Ġprotocol - agnostic Ġtype Ġdescription Ġof Ġa Ġfield . Ċ Ġ*/ Ċ sealed Ġclass ĠSerial Kind Ġ{ ĊĠĠĠ Ġobject ĠUnit Ġ: ĠSerial Kind () ĊĠĠĠ Ġobject ĠInteger Ġ: ĠSerial Kind () ĊĠĠĠ Ġobject ĠLong Ġ: ĠSerial Kind () ĊĠĠĠ Ġobject ĠDouble Ġ: ĠSerial Kind () ĊĠĠĠ Ġobject ĠString Ġ: ĠSerial Kind () ĊĠĠĠ Ġobject ĠBoolean Ġ: ĠSerial Kind () ĊĠĠĠ Ġobject ĠByte Ġ: ĠSerial Kind () ĊĠĠĠ Ġobject ĠChar Ġ: ĠSerial Kind () ĊĠĠĠ Ġobject ĠShort Ġ: ĠSerial Kind () ĊĠĠĠ Ġobject ĠFloat Ġ: ĠSerial Kind () ĊĠĠĠ Ġobject ĠMap Ġ: ĠSerial Kind () ĊĠĠĠ Ġobject ĠList Ġ: ĠSerial Kind () ĊĠĠĠ Ġobject ĠStruct Ġ: ĠSerial Kind () ĊĠĠĠ Ġobject ĠTimestamp Ġ: ĠSerial Kind () ĊĠĠĠ Ġobject ĠBlob Ġ: ĠSerial Kind () ĊĠĠĠ Ġobject ĠDocument Ġ: ĠSerial Kind () ĊĠĠĠ Ġobject ĠBigNumber Ġ: ĠSerial Kind () ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): Ġkotlin . String Ġ= Ġthis :: class . simple Name Ġ?: Ġ" Serial Kind " Ċ } Ċ Ċ /** Ċ Ġ* ĠMetadata Ġto Ġdescribe Ġhow Ġa Ġgiven Ġmember Ġproperty Ġmaps Ġto Ġserialization . Ċ Ġ*/ Ċ open Ġclass ĠS dk FieldDescriptor ( val Ġkind : ĠSerial Kind , Ġvar Ġindex : ĠInt Ġ= Ġ 0 , Ġval Ġtraits : ĠSet < Field Trait > Ġ= Ġempty Set ()) Ġ{ ĊĠĠĠ Ġconstructor ( kind : ĠSerial Kind , Ġvar arg Ġtrait : ĠField Trait ) Ġ: Ġthis ( kind , Ġ 0 , Ġtrait . toSet ()) ĊĠĠĠ Ġconstructor ( kind : ĠSerial Kind , Ġtraits : ĠSet < Field Trait >) Ġ: Ġthis ( kind , Ġ 0 , Ġtraits ) ĊĊĠĠĠ Ġ// ĠReserved Ġfor Ġformat - specific Ġcompanion Ġextension Ġfunctions ĊĠĠĠ Ġcompanion Ġobject ; ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġ" Sdk FieldDescriptor .$ kind ( traits =${ traits . join ToString ( separator Ġ= Ġ", ") Ġ}) " Ċ } Ċ Ċ /** Ċ Ġ* ĠReturns Ġthe Ġsingleton Ġinstance Ġof Ġrequired ĠTrait , Ġor ĠIllegalArgumentException Ġif Ġdoes Ġnot Ġexist . Ċ Ġ*/ Ċ inline Ġfun Ġ< re ified ĠT Expected Ġ: ĠField Trait > ĠS dk FieldDescriptor . expect Trait (): ĠT Expected Ġ{ ĊĠĠĠ Ġval Ġx Ġ= Ġtraits . find Ġ{ Ġit :: class Ġ== ĠT Expected :: class Ġ} ĊĠĠĠ Ġrequire NotNull ( x ) Ġ{ Ġ" Expected Ġto Ġfind Ġtrait Ġ${ T Expected :: class } Ġin Ġ$ this Ġbut Ġwas Ġnot Ġpresent ." Ġ} ĊĊĠĠĠ Ġreturn Ġx Ġas ĠT Expected Ċ } Ċ Ċ inline Ġfun Ġ< re ified ĠT Expected Ġ: ĠField Trait > ĠS dk FieldDescriptor . find Trait (): ĠT Expected ? Ġ{ ĊĠĠĠ Ġval Ġx Ġ= Ġtraits . find Ġ{ Ġit :: class Ġ== ĠT Expected :: class Ġ} ĊĊĠĠĠ Ġreturn Ġx Ġas ? ĠT Expected Ċ } Ċ Ċ /** Ċ Ġ* ĠFind Ġa Ġset Ġof Ġtraits Ġof Ġthe Ġgiven Ġtype . Ċ Ġ*/ Ċ inline Ġfun Ġ< re ified ĠT Expected Ġ: ĠField Trait > ĠS dk FieldDescriptor . find Traits (): ĠSet < T Expected > Ġ= Ġtraits ĊĠĠĠ Ġ. filter Ġ{ Ġit :: class Ġ== ĠT Expected :: class Ġ} ĊĠĠĠ Ġ. map Ġ{ Ġit Ġas ĠT Expected Ġ} ĊĠĠĠ Ġ. toSet () Ċ Ċ inline Ġfun Ġ< re ified ĠT Expected Ġ: ĠField Trait > ĠS dk FieldDescriptor . has Trait () Ġ= Ġtraits . any Ġ{ Ġit Ġis ĠT Expected Ġ} Ċ