package Ġcom . ar jan v lek . oxy gen updater . internal Ċ Ċ import Ġcom . ar jan v lek . oxy gen updater . internal . i ab . I ab Result Ċ import Ġcom . ar jan v lek . oxy gen updater . internal . i ab . Inventory Ċ import Ġcom . ar jan v lek . oxy gen updater . internal . i ab . Purchase Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġcom . fasterxml . jackson . databind . Property Naming Strategy Ċ import Ġcom . fasterxml . jackson . databind . module . Simple Module Ċ import Ġcom . fasterxml . jackson . module . kotlin . jackson ObjectMapper Ċ Ċ val ĠobjectMapper : ĠObjectMapper Ġ= Ġj ack son ObjectMapper (). register Module ( ĊĠĠĠ Ġ// Ġco erce Ġstrings Ġto Ġb ooleans ĊĠĠĠ ĠSimple Module (). add Deserializer ( Boolean :: class . java , ĠBoolean Deserializer ()) Ċ ). setProperty Naming Strategy ( Property Naming Strategy . S NA KE _ CASE ) Ċ // Ġ^ ĠTell ĠObjectMapper Ġto Ġconvert Ġcamel Case Ġto Ġsnake _ case Ġ( Server ĠAPI Ġresponse Ġhave Ġfields Ġin Ġsnake Ġcase ) Ċ // ĠThis Ġhelps Ġus Ġavoid Ġannot ating Ġevery Ġfield Ġwith Ġ`@ JsonProperty ` Ġun ne cess arily Ċ Ċ /** Ċ Ġ* ĠGeneric ĠKotlin Ġcallback . ĠThis Ġused Ġto Ġbe Ġ[ java . util . function . Consumer ] Ġin ĠJava Ċ Ġ*/ Ċ type alias ĠKotlin Callback < E > Ġ= Ġ( E ) Ġ-> ĠUnit Ċ Ċ /** Ċ Ġ* ĠGeneric ĠKotlin Ġfunction . ĠThis Ġused Ġto Ġbe Ġ[ java . util . function . Function ] Ġin ĠJava Ċ Ġ*/ Ċ type alias ĠKotlin Function < T , ĠR > Ġ= Ġ( T ) Ġ-> ĠR Ċ Ċ /** Ċ Ġ* ĠCallback Ġthat Ġnot ifies Ġwhen Ġa Ġpurchase Ġis Ġfinished . Ċ Ġ* Ċ Ġ* ĠCalled Ġto Ġnotify Ġthat Ġan Ġin - app Ġpurchase Ġfinished . ĠIf Ġthe Ġpurchase Ġwas Ġsuccessful , Ġthen Ċ Ġ* Ġthe Ġsku Ġparameter Ġspecifies Ġwhich Ġitem Ġwas Ġpurch ased . ĠIf Ġthe Ġpurchase Ġfailed , Ġthe Ġsku Ġand Ċ Ġ* Ġextra Data Ġparameters Ġmay Ġor Ġmay Ġnot Ġbe Ġnull , Ġdepending Ġon Ġhow Ġfar Ġthe Ġpurchase Ġprocess Ċ Ġ* Ġwent . Ċ Ġ*/ Ċ type alias ĠOn I ab Purchase Finished Listener Ġ= Ġ( result : ĠI ab Result , Ġpurchase : ĠPurchase ?) Ġ-> ĠUnit Ċ Ċ /** Ċ Ġ* ĠCallback Ġfor Ġsetup Ġprocess . ĠCalled Ġwhen Ġthe Ġsetup Ġprocess Ġis Ġcomplete . Ċ Ġ*/ Ċ type alias ĠOn I ab Setup Finished Listener Ġ= Ġ( result : ĠI ab Result ) Ġ-> ĠUnit Ċ Ċ /** Ċ Ġ* ĠListener Ġthat Ġnot ifies Ġwhen Ġan Ġinventory Ġquery Ġoperation Ġcompletes . Ċ Ġ*/ Ċ type alias ĠQuery Inventory Finished Listener Ġ= Ġ( result : ĠI ab Result , Ġinv : ĠInventory ?) Ġ-> ĠUnit Ċ Ċ /** Ċ Ġ* ĠCallback Ġthat Ġnot ifies Ġwhen Ġa Ġconsumption Ġoperation Ġfinishes . Ċ Ġ*/ Ċ type alias ĠOn Consume Finished Listener Ġ= Ġ( purchase : ĠPurchase ?, Ġresult : ĠI ab Result ?) Ġ-> ĠUnit Ċ Ċ /** Ċ Ġ* ĠCallback Ġthat Ġnot ifies Ġwhen Ġa Ġmulti - item Ġconsumption Ġoperation Ġfinishes . Ċ Ġ*/ Ċ type alias ĠOn Consume Multi Finished Listener Ġ= Ġ( p urchases : ĠList < Purchase > ?, Ġresults : ĠList < I ab Result ?> ?) Ġ-> ĠUnit Ċ