package Ġit . fac ile . records . agent . di Ċ Ċ import Ġcom . jak ew h art on . ret rofit 2 . converter . kotlin x . serialization . as Converter Factory Ċ import Ġdagger . Module Ċ import Ġdagger . Provides Ċ import Ġdagger . h ilt . Install In Ċ import Ġdagger . h ilt . components . Singleton Component Ċ import Ġfr . s peek ha . http mock er . Mode Ċ import Ġfr . s peek ha . http mock er . model . Response Descriptor Ċ import Ġfr . s peek ha . http mock er . okhttp . Mock Response Interceptor Ċ import Ġfr . s peek ha . http mock er . okhttp . builder . mock Interceptor Ċ import Ġit . fac ile . records . agent . Build Config Ċ import Ġit . fac ile . records . agent . domain . repository . network . RestApi Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . serialization . Experimental Serialization Api Ċ import Ġkotlinx . serialization . json . Json Ċ import Ġokhttp 3 . Interceptor Ċ import Ġokhttp 3 . MediaType . Companion . to MediaType Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġokhttp 3 . logging . Http Logging Interceptor Ċ import Ġretrofit 2 . Ret rofit Ċ import Ġjavax . inject . Singleton Ċ Ċ /** Ċ Ġ* ĠThis Ġis Ġthe Ġmain ĠH ilt Ġmodules . ĠI 'll Ġkeep Ġthe ĠKotlin Ġserial izations , ĠRet rofit Ċ Ġ* Ġand Ġok Http Ġlibs Ġeven Ġif Ġthe Ġremote Ġrepo Ġis Ġmocked Ġfor Ġcomplet eness Ċ Ġ* Ġ*/ Ċ @ Experimental Serialization Api Ċ @ Module Ċ @ Install In ( Singleton Component :: class ) Ċ object ĠCore Module Ġ{ ĊĠĠĠ Ġprivate Ġconst Ġval ĠBASE _ URL Ġ= Ġ" https :// www . fac ile . test . it /" ĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġfun Ġprovide Cor out in Dispatcher () Ġ= ĠDispatch ers . IO ĊĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġfun Ġprovide Ret rofit ( json : ĠJson , Ġok HttpClient : ĠOk HttpClient ): ĠRet rofit Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠcontentType Ġ= Ġ" application / json " ĊĠĠĠĠĠĠĠ Ġreturn ĠRet rofit . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Converter Factory ( json . as Converter Factory ( contentType . to MediaType ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. baseUrl ( BASE _ URL ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. client ( ok HttpClient ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġfun Ġprovide Json Configuration (): ĠJson Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠJson Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġencode Defaults Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġignore Unknown Keys Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Len ient Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġallow Structured Map Keys Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpretty Print Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuse Array Pol ym orphism Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclass Discriminator Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġfun Ġprovide Api ( ret rofit : ĠRet rofit ): ĠRest Api Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġretrofit . create ( RestApi :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġfun Ġprovide Ok HttpClient ( intercept ors : ĠArrayList < Interceptor >): ĠOk HttpClient Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclient Builder Ġ= ĠOk HttpClient . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. follow Redirect s ( false ) ĊĠĠĠĠĠĠĠ Ġintercept ors . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient Builder . add Interceptor ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġclient Builder . build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġfun Ġprovide Intercept ors ( logging Interceptor : ĠHttp Logging Interceptor , mock Response Interceptor : ĠMock Response Interceptor ): ĠArrayList < Interceptor > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintercept ors Ġ= Ġarray ListOf < Interceptor >() ĊĠĠĠĠĠĠĠ Ġintercept ors . add ( logging Interceptor ) ĊĠĠĠĠĠĠĠ Ġintercept ors . add ( mock Response Interceptor ) ĊĠĠĠĠĠĠĠ Ġreturn Ġintercept ors ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġfun Ġprovide Log gin Interceptor (): ĠHttp Logging Interceptor Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠHttp Logging Interceptor (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlevel Ġ= Ġif ( Build Config . DEBUG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Logging Interceptor . Level . BODY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp Logging Interceptor . Level . NONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġfun Ġprovide Http Mock ery Interceptor (): ĠMock Response Interceptor Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmock Interceptor Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuse Dynamic Mocks Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġresponse Ġis Ġcho osen Ġmore Ġor Ġless Ġrand ome ly . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif (( 0 .. 1 0 0 ). random (). rem ( 2 ) Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse Descriptor ( delay Ġ= Ġ 1 0 0 0 L , Ġcode Ġ= Ġ 2 0 0 , Ġ" application / json ", Ġbody Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" records ":[ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id ": 1 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" record _ name ":" Pass ap orto " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id ": 1 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" record _ name ":" Contr at to " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse Descriptor ( 5 0 0 L , Ġcode Ġ= Ġ 4 0 4 ,) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Mode ( Mode . ENABLED ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ } Ċ