/* Ċ Ġ* ĠCopyright ĠAmazon . com , ĠInc . Ġor Ġits Ġaffiliates . ĠAll ĠRights ĠReserved . Ċ Ġ* ĠSPDX - License - Identifier : ĠApache - 2 . 0 . Ċ Ġ*/ Ċ package Ġsoftware . amazon . smithy . swift . codegen . integration . serde . json Ċ Ċ import Ġsoftware . amazon . smithy . model . shapes . Collection Shape Ċ import Ġsoftware . amazon . smithy . model . shapes . Map Shape Ċ import Ġsoftware . amazon . smithy . model . shapes . Member Shape Ċ import Ġsoftware . amazon . smithy . model . traits . Timestamp Format Trait Ċ import Ġsoftware . amazon . smithy . swift . codegen . Swift Types Ċ import Ġsoftware . amazon . smithy . swift . codegen . Swift Writer Ċ import Ġsoftware . amazon . smithy . swift . codegen . integration . Protocol Generator Ċ Ċ class ĠUnion Encode Generator ( ĊĠĠĠ Ġprivate Ġval Ġctx : ĠProtocol Generator . Generation Context , ĊĠĠĠ Ġprivate Ġval Ġmembers : ĠList < Member Shape >, ĊĠĠĠ Ġprivate Ġval Ġwriter : ĠSwift Writer , ĊĠĠĠ Ġprivate Ġval Ġdefault Timestamp Format : ĠTimestamp Format Trait . Format Ċ ) Ġ: ĠMember Shape Encode Generator ( ctx , Ġwriter , Ġdefault Timestamp Format ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġrender () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontainer Name Ġ= Ġ" container " ĊĠĠĠĠĠĠĠ Ġwriter . open Block (" public Ġfunc Ġencode ( to Ġencoder : Ġ\$ N ) Ġthrows Ġ{ ", Ġ" }", ĠSwift Types . Encoder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . write (" var Ġ\$ L Ġ= Ġencoder . container ( keyed By : ĠCoding Keys . self )", Ġcontainer Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . open Block (" switch Ġself Ġ{ ", Ġ" }") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmembers Sorted ByName : ĠList < Member Shape > Ġ= Ġmembers . sorted By Ġ{ Ġit . member Name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmembers Sorted ByName . forEach Ġ{ Ġmember Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtarget Ġ= Ġctx . model . expect Shape ( member . target ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmember Name Ġ= Ġctx . symbol Provider . to Member Name ( member ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . write (" case Ġlet Ġ. \$ L (\ $ L ): ", Ġmember Name , Ġmember Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . indent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( target ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCollection Shape Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender Encode List Member ( target , Ġmember Name , Ġcontainer Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMap Shape Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender Encode Map Member ( target , Ġmember Name , Ġcontainer Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender Encode Associated Type ( target , Ġmember , Ġcontainer Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . ded ent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . write (" case Ġlet Ġ. sdk Unknown ( sdk Unknown ): ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . indent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . write (" try Ġcontainer . encode ( sdk Unknown , Ġfor Key : Ġ. sdk Unknown )") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . ded ent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ