package Ġjp . co . pan pan ini Ċ Ċ import Ġcom . impro ve _ future . case _ ch anger . to Snake Case Ċ import Ġcom . squareup . kotlin po et . ClassName Ċ import Ġcom . squareup . kotlin po et . TypeName Ċ import Ġpb and k . gen . File Ċ Ċ fun ĠFile . Field . Standard . un marshal Read Expression ( kotlin Type Mappings : ĠMap < String , ĠString >) Ġ= Ġtype . never Packed . let Ġ{ Ġnever Packed Ġ-> ĊĠĠĠ Ġval Ġrep End Ġ= Ġif Ġ( never Packed ) Ġ", Ġtrue " Ġelse Ġ", Ġfalse " ĊĠĠĠ Ġval Ġread Repeated Ġ= Ġif Ġ( never Packed ) Ġ" true ," Ġelse Ġ" false ," ĊĠĠĠ Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠ ĠFile . Field . Type . ENUM Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( repeated ) Ġ" proto Unmarshal . read Repeated Enum ($ kotlin FieldName , Ġ${ kotlin Qualified TypeName ( kotlin Type Mappings )}. Companion )" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ" proto Unmarshal . read Enum (${ kotlin Qualified TypeName ( kotlin Type Mappings )}. Companion )" ĊĠĠĠĠĠĠĠ ĠFile . Field . Type . MESSAGE Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! repeated ) Ġ" proto Unmarshal . read Message (${ kotlin Qualified TypeName ( kotlin Type Mappings )}. Companion )" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( map ) Ġ" proto Unmarshal . read Map ($ kotlin FieldName , Ġ${ kotlin Qualified TypeName ( kotlin Type Mappings )}. Companion $ rep End )" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ" proto Unmarshal . read Repeated Message ($ kotlin FieldName , Ġ${ kotlin Qualified TypeName ( kotlin Type Mappings )}. Companion $ rep End )" ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( repeated ) Ġ" proto Unmarshal . read Repeated ($ kotlin FieldName , Ġ$ read Repeated Ġproto Unmarshal :: ${ type . read Method })" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ" proto Unmarshal .${ type . read Method } ()" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠFile . Field . Standard . kotlin Qualified TypeName ( kotlin Type Mappings : ĠMap < String , ĠString >): ĠType Name Ġ= Ġwhen Ġ{ ĊĠĠĠ Ġkotlin Local TypeName Ġ!= Ġnull Ġ-> ĠClass Name ("", Ġkotlin Local TypeName !! ) ĊĠĠĠ Ġlocal TypeName Ġ!= Ġnull Ġ-> ĠClass Name ("", Ġkotlin Type Mappings . getOrElse ( local TypeName !! ) Ġ{ Ġerror (" Unable Ġto Ġfind Ġmapping Ġfor Ġ$ local TypeName ") Ġ}) ĊĠĠĠ Ġelse Ġ-> Ġtype . standard TypeName Ċ } Ċ Ċ val ĠFile . Field . defaultValue Name Ġ: ĠString ĊĠĠĠ Ġget () Ġ= Ġ" DEFAULT _${ this . kotlin FieldName . capitalize (). to Snake Case (). toUpperCase () }" Ċ Ċ val ĠFile . Field . Standard . tag Ġget () Ġ= Ġ( number Ġshl Ġ 3 ) Ġor Ġwhen Ġ{ ĊĠĠĠ Ġrepeated Ġ&& Ġpacked Ġ-> Ġ 2 ĊĠĠĠ Ġelse Ġ-> Ġtype . wire Format Ċ } Ċ Ċ fun ĠFile . Field . Standard . defaultValue ( version : ĠInt , Ġkotlin Type Mappings : ĠMap < String , ĠString >) Ġ= Ġwhen Ġ{ ĊĠĠĠ Ġmap Ġ-> Ġ" empty Map ()" ĊĠĠĠ Ġrepeated Ġ-> Ġ" emptyList ()" ĊĠĠĠ Ġversion Ġ== Ġ 2 Ġ&& Ġoptional Ġ-> Ġ" null " ĊĠĠĠ Ġtype Ġ== ĠFile . Field . Type . ENUM Ġ-> Ġ"${ kotlin Qualified TypeName ( kotlin Type Mappings )}. from Value ( 0 )" ĊĠĠĠ Ġtype Ġ== ĠFile . Field . Type . MESSAGE Ġ-> Ġ"${ kotlin Qualified TypeName ( kotlin Type Mappings )} ()" ĊĠĠĠ Ġelse Ġ-> Ġtype . defaultValue Ċ } Ċ Ċ fun ĠFile . Field . Standard . local Type ( file : ĠFile ) Ġ= Ġlocal TypeName ?. let Ġ{ Ġfind Local Type ( file , Ġit ) Ġ} Ċ Ċ private Ġfun Ġfind Local Type ( file : ĠFile , Ġproto Name : ĠString , Ġparent : ĠFile . Type . Message ? Ġ= Ġnull ): ĠFile . Type ? Ġ{ ĊĠĠĠ Ġ// ĠGet Ġthe Ġset Ġto Ġlook Ġin Ġand Ġthe Ġtype Ġname ĊĠĠĠ Ġval Ġ( look In , ĠtypeName ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parent Ġ== Ġnull ) Ġfile . types Ġto Ġproto Name . remove Prefix (". ${ file . packageName }. ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġparent . nested Types Ġto Ġproto Name ĊĠĠĠ Ġ// ĠGo Ġdeeper Ġif Ġthere 's Ġa Ġdot ĊĠĠĠ ĠtypeName . indexOf ('. '). let Ġ{ Ġperiod Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( period Ġ== Ġ- 1 ) Ġreturn Ġlook In . find Ġ{ Ġit . name Ġ== ĠtypeName Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfind Local Type ( file , ĠtypeName . substring ( period Ġ+ Ġ 1 ), ĠtypeName . substring ( 0 , Ġperiod ). let Ġ{ Ġparent TypeName Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlook In . find Ġ{ Ġit . name Ġ== Ġparent TypeName Ġ} Ġas ? ĠFile . Type . Message ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġreturn Ġnull ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ val ĠFile . Field . OneOf . type Ġget () Ġ= ĠClass Name ("", Ġkotlin TypeName ) Ċ Ċ val ĠFile . Field . OneOf . defaultValue Ġget () Ġ= Ġ"$ kotlin TypeName . Not Set " ĊĊ