/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠOut fox , ĠInc . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġio . out fo xx . s unday Ċ Ċ import Ġio . out fo xx . s unday . http . Method Ċ import Ġio . out fo xx . s unday . http . Parameters Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġokhttp 3 . Headers Ċ import Ġokhttp 3 . Request Ċ import Ġokhttp 3 . Response Ċ import Ġorg . z al ando . problem . Problem Ċ import Ġjava . io . Closeable Ċ import Ġkotlin . reflect . K Class Ċ import Ġkotlin . reflect . K Type Ċ Ċ abstract Ġclass ĠRequest Factory Ġ: ĠClose able Ġ{ ĊĊĠ Ġabstract Ġfun Ġregister Problem ( type Id : ĠString , Ġproblem Type : ĠK Class < out ĠProblem >) ĊĊĠ Ġsuspend Ġinline Ġfun Ġ< re ified ĠB Ġ: ĠAny > Ġrequest ( ĊĠĠĠ Ġmethod : ĠMethod , ĊĠĠĠ Ġpath Template : ĠString , ĊĠĠĠ Ġpath Parameters : ĠParameters ? Ġ= Ġnull , ĊĠĠĠ Ġquery Parameters : ĠParameters ? Ġ= Ġnull , ĊĠĠĠ Ġbody : ĠB ? Ġ= Ġnull , ĊĠĠĠ Ġcontent Types : ĠList < MediaType >? Ġ= Ġnull , ĊĠĠĠ Ġaccept Types : ĠList < MediaType >? Ġ= Ġnull , ĊĠĠĠ Ġheaders : ĠParameters ? Ġ= Ġnull ĊĠ Ġ) Ġ= Ġrequest ( ĊĠĠĠ Ġmethod , ĊĠĠĠ Ġpath Template , ĊĠĠĠ Ġpath Parameters , ĊĠĠĠ Ġquery Parameters , ĊĠĠĠ Ġbody , ĊĠĠĠ ĠtypeOf < B >(), ĊĠĠĠ Ġcontent Types , ĊĠĠĠ Ġaccept Types , ĊĠĠĠ Ġheaders ĊĠ Ġ) ĊĊĠ Ġsuspend Ġinline Ġfun Ġrequest ( ĊĠĠĠ Ġmethod : ĠMethod , ĊĠĠĠ Ġpath Template : ĠString , ĊĠĠĠ Ġpath Parameters : ĠParameters ? Ġ= Ġnull , ĊĠĠĠ Ġquery Parameters : ĠParameters ? Ġ= Ġnull , ĊĠĠĠ Ġcontent Types : ĠList < MediaType >? Ġ= Ġnull , ĊĠĠĠ Ġaccept Types : ĠList < MediaType >? Ġ= Ġnull , ĊĠĠĠ Ġheaders : ĠParameters ? Ġ= Ġnull ĊĠ Ġ) Ġ= Ġrequest ( ĊĠĠĠ Ġmethod , ĊĠĠĠ Ġpath Template , ĊĠĠĠ Ġpath Parameters , ĊĠĠĠ Ġquery Parameters , ĊĠĠĠ Ġnull Ġas ĠUnit ?, ĊĠĠĠ ĠtypeOf < Unit >(), ĊĠĠĠ Ġcontent Types , ĊĠĠĠ Ġaccept Types , ĊĠĠĠ Ġheaders ĊĠ Ġ) ĊĊĠ Ġabstract Ġsuspend Ġfun Ġ< B Ġ: ĠAny > Ġrequest ( ĊĠĠĠ Ġmethod : ĠMethod , ĊĠĠĠ Ġpath Template : ĠString , ĊĠĠĠ Ġpath Parameters : ĠParameters ? Ġ= Ġnull , ĊĠĠĠ Ġquery Parameters : ĠParameters ? Ġ= Ġnull , ĊĠĠĠ Ġbody : ĠB ? Ġ= Ġnull , ĊĠĠĠ Ġbody Type : ĠK Type ? Ġ= Ġnull , ĊĠĠĠ Ġcontent Types : ĠList < MediaType >? Ġ= Ġnull , ĊĠĠĠ Ġaccept Types : ĠList < MediaType >? Ġ= Ġnull , ĊĠĠĠ Ġheaders : ĠParameters ? Ġ= Ġnull ĊĠ Ġ): ĠRequest ĊĊĠ Ġabstract Ġsuspend Ġfun Ġresponse ( request : ĠRequest ): ĠResponse ĊĊĠ Ġsuspend Ġinline Ġfun Ġ< re ified ĠB Ġ: ĠAny > Ġresponse ( ĊĠĠĠ Ġmethod : ĠMethod , ĊĠĠĠ Ġpath Template : ĠString , ĊĠĠĠ Ġpath Parameters : ĠParameters ? Ġ= Ġnull , ĊĠĠĠ Ġquery Parameters : ĠParameters ? Ġ= Ġnull , ĊĠĠĠ Ġbody : ĠB ? Ġ= Ġnull , ĊĠĠĠ Ġcontent Types : ĠList < MediaType >? Ġ= Ġnull , ĊĠĠĠ Ġaccept Types : ĠList < MediaType >? Ġ= Ġnull , ĊĠĠĠ Ġheaders : ĠParameters ? Ġ= Ġnull ĊĠ Ġ) Ġ= Ġresponse ( ĊĠĠĠ Ġmethod , ĊĠĠĠ Ġpath Template , ĊĠĠĠ Ġpath Parameters , ĊĠĠĠ Ġquery Parameters , ĊĠĠĠ Ġbody , ĊĠĠĠ ĠtypeOf < B >(), ĊĠĠĠ Ġcontent Types , ĊĠĠĠ Ġaccept Types , ĊĠĠĠ Ġheaders ĊĠ Ġ) ĊĊĠ Ġsuspend Ġinline Ġfun Ġresponse ( ĊĠĠĠ Ġmethod : ĠMethod , ĊĠĠĠ Ġpath Template : ĠString , ĊĠĠĠ Ġpath Parameters : ĠParameters ? Ġ= Ġnull , ĊĠĠĠ Ġquery Parameters : ĠParameters ? Ġ= Ġnull , ĊĠĠĠ Ġcontent Types : ĠList < MediaType >? Ġ= Ġnull , ĊĠĠĠ Ġaccept Types : ĠList < MediaType >? Ġ= Ġnull , ĊĠĠĠ Ġheaders : ĠParameters ? Ġ= Ġnull ĊĠ Ġ) Ġ= Ġresponse ( ĊĠĠĠ Ġmethod , ĊĠĠĠ Ġpath Template , ĊĠĠĠ Ġpath Parameters , ĊĠĠĠ Ġquery Parameters , ĊĠĠĠ Ġnull Ġas ĠUnit ?, ĊĠĠĠ ĠtypeOf < Unit >(), ĊĠĠĠ Ġcontent Types , ĊĠĠĠ Ġaccept Types , ĊĠĠĠ Ġheaders ĊĠ Ġ) ĊĊĠ Ġabstract Ġsuspend Ġfun Ġ< B Ġ: ĠAny > Ġresponse ( ĊĠĠĠ Ġmethod : ĠMethod , ĊĠĠĠ Ġpath Template : ĠString , ĊĠĠĠ Ġpath Parameters : ĠParameters ? Ġ= Ġnull , ĊĠĠĠ Ġquery Parameters : ĠParameters ? Ġ= Ġnull , ĊĠĠĠ Ġbody : ĠB ? Ġ= Ġnull , ĊĠĠĠ Ġbody Type : ĠK Type ?, ĊĠĠĠ Ġcontent Types : ĠList < MediaType >? Ġ= Ġnull , ĊĠĠĠ Ġaccept Types : ĠList < MediaType >? Ġ= Ġnull , ĊĠĠĠ Ġheaders : ĠParameters ? Ġ= Ġnull ĊĠ Ġ): ĠResponse ĊĊĠ Ġsuspend Ġinline Ġfun Ġ< re ified ĠB Ġ: ĠAny , Ġre ified ĠR Ġ: ĠAny > Ġresult ( ĊĠĠĠ Ġmethod : ĠMethod , ĊĠĠĠ Ġpath Template : ĠString , ĊĠĠĠ Ġpath Parameters : ĠParameters ? Ġ= Ġnull , ĊĠĠĠ Ġquery Parameters : ĠParameters ? Ġ= Ġnull , ĊĠĠĠ Ġbody : ĠB ? Ġ= Ġnull , ĊĠĠĠ Ġcontent Types : ĠList < MediaType >? Ġ= Ġnull , ĊĠĠĠ Ġaccept Types : ĠList < MediaType >? Ġ= Ġnull , ĊĠĠĠ Ġheaders : ĠParameters ? Ġ= Ġnull , ĊĠ Ġ): ĠR Ġ= Ġresult ( ĊĠĠĠ Ġmethod , ĊĠĠĠ Ġpath Template , ĊĠĠĠ Ġpath Parameters , ĊĠĠĠ Ġquery Parameters , ĊĠĠĠ Ġbody , ĊĠĠĠ ĠtypeOf < B >(), ĊĠĠĠ Ġcontent Types , ĊĠĠĠ Ġaccept Types , ĊĠĠĠ Ġheaders , ĊĠĠĠ ĠtypeOf < R >() ĊĠ Ġ) ĊĊĠ Ġsuspend Ġinline Ġfun Ġ< re ified ĠR Ġ: ĠAny > Ġresult ( ĊĠĠĠ Ġmethod : ĠMethod , ĊĠĠĠ Ġpath Template : ĠString , ĊĠĠĠ Ġpath Parameters : ĠParameters ? Ġ= Ġnull , ĊĠĠĠ Ġquery Parameters : ĠParameters ? Ġ= Ġnull , ĊĠĠĠ Ġcontent Types : ĠList < MediaType >? Ġ= Ġnull , ĊĠĠĠ Ġaccept Types : ĠList < MediaType >? Ġ= Ġnull , ĊĠĠĠ Ġheaders : ĠParameters ? Ġ= Ġnull , ĊĠ Ġ): ĠR Ġ= Ġresult ( ĊĠĠĠ Ġmethod , ĊĠĠĠ Ġpath Template , ĊĠĠĠ Ġpath Parameters , ĊĠĠĠ Ġquery Parameters , ĊĠĠĠ Ġnull Ġas ĠUnit ?, ĊĠĠĠ ĠtypeOf < Unit >(), ĊĠĠĠ Ġcontent Types , ĊĠĠĠ Ġaccept Types , ĊĠĠĠ Ġheaders , ĊĠĠĠ ĠtypeOf < R >() ĊĠ Ġ) ĊĊĠ Ġabstract Ġsuspend Ġfun Ġ< B Ġ: ĠAny , ĠR Ġ: ĠAny > Ġresult ( ĊĠĠĠ Ġmethod : ĠMethod , ĊĠĠĠ Ġpath Template : ĠString , ĊĠĠĠ Ġpath Parameters : ĠParameters ? Ġ= Ġnull , ĊĠĠĠ Ġquery Parameters : ĠParameters ? Ġ= Ġnull , ĊĠĠĠ Ġbody : ĠB ? Ġ= Ġnull , ĊĠĠĠ Ġbody Type : ĠK Type , ĊĠĠĠ Ġcontent Types : ĠList < MediaType >? Ġ= Ġnull , ĊĠĠĠ Ġaccept Types : ĠList < MediaType >? Ġ= Ġnull , ĊĠĠĠ Ġheaders : ĠParameters ? Ġ= Ġnull , ĊĠĠĠ Ġresult Type : ĠK Type ĊĠ Ġ): ĠR ĊĊĠ Ġfun Ġ< B Ġ: ĠAny > Ġevent Source ( ĊĠĠĠ Ġmethod : ĠMethod , ĊĠĠĠ Ġpath Template : ĠString , ĊĠĠĠ Ġpath Parameters : ĠParameters ? Ġ= Ġnull , ĊĠĠĠ Ġquery Parameters : ĠParameters ? Ġ= Ġnull , ĊĠĠĠ Ġbody : ĠB ? Ġ= Ġnull , ĊĠĠĠ Ġbody Type : ĠK Type ? Ġ= Ġnull , ĊĠĠĠ Ġcontent Types : ĠList < MediaType >? Ġ= Ġnull , ĊĠĠĠ Ġaccept Types : ĠList < MediaType >? Ġ= Ġnull , ĊĠĠĠ Ġheaders : ĠParameters ? Ġ= Ġnull ĊĠ Ġ): ĠEvent Source Ġ= Ġevent Source Ġ{ ĊĠĠĠ Ġrequest ( ĊĠĠĠĠĠ Ġmethod , ĊĠĠĠĠĠ Ġpath Template , ĊĠĠĠĠĠ Ġpath Parameters , ĊĠĠĠĠĠ Ġquery Parameters , ĊĠĠĠĠĠ Ġbody , ĊĠĠĠĠĠ Ġbody Type , ĊĠĠĠĠĠ Ġcontent Types , ĊĠĠĠĠĠ Ġaccept Types , ĊĠĠĠĠĠ Ġheaders ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġfun Ġevent Source ( ĊĠĠĠ Ġmethod : ĠMethod , ĊĠĠĠ Ġpath Template : ĠString , ĊĠĠĠ Ġpath Parameters : ĠParameters ? Ġ= Ġnull , ĊĠĠĠ Ġquery Parameters : ĠParameters ? Ġ= Ġnull , ĊĠĠĠ Ġcontent Types : ĠList < MediaType >? Ġ= Ġnull , ĊĠĠĠ Ġaccept Types : ĠList < MediaType >? Ġ= Ġnull , ĊĠĠĠ Ġheaders : ĠParameters ? Ġ= Ġnull ĊĠ Ġ): ĠEvent Source Ġ= Ġevent Source Ġ{ Ġe ent Source Headers Ġ-> ĊĠĠĠ Ġrequest ( ĊĠĠĠĠĠ Ġmethod , ĊĠĠĠĠĠ Ġpath Template , ĊĠĠĠĠĠ Ġpath Parameters , ĊĠĠĠĠĠ Ġquery Parameters , ĊĠĠĠĠĠ Ġnull Ġas ĠUnit ?, ĊĠĠĠĠĠ ĠtypeOf < Unit >(), ĊĠĠĠĠĠ Ġcontent Types , ĊĠĠĠĠĠ Ġaccept Types , ĊĠĠĠĠĠ Ġe ent Source Headers . to Multimap (). let Ġ{ Ġevent Source HeaderParams Ġ-> ĊĠĠĠĠĠĠĠ Ġheaders ?. let Ġ{ Ġheaders Ġ+ Ġevent Source HeaderParams Ġ} Ġ?: Ġevent Source HeaderParams ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġprotected Ġabstract Ġfun Ġevent Source ( request Supplier : Ġsuspend Ġ( Headers ) Ġ-> ĠRequest ): ĠEvent Source ĊĊĠ Ġfun Ġ< B Ġ: ĠAny , ĠD Ġ: ĠAny > Ġevent Stream ( ĊĠĠĠ Ġmethod : ĠMethod , ĊĠĠĠ Ġpath Template : ĠString , ĊĠĠĠ Ġpath Parameters : ĠParameters ? Ġ= Ġnull , ĊĠĠĠ Ġquery Parameters : ĠParameters ? Ġ= Ġnull , ĊĠĠĠ Ġbody : ĠB ? Ġ= Ġnull , ĊĠĠĠ Ġbody Type : ĠK Type ? Ġ= Ġnull , ĊĠĠĠ Ġcontent Types : ĠList < MediaType >? Ġ= Ġnull , ĊĠĠĠ Ġaccept Types : ĠList < MediaType >? Ġ= Ġnull , ĊĠĠĠ Ġheaders : ĠParameters ? Ġ= Ġnull , ĊĠĠĠ Ġevent Types : ĠMap < String , ĠK Type > ĊĠ Ġ): ĠFlow < D > Ġ= Ġevent Stream ( event Types ) Ġ{ ĊĠĠĠ Ġrequest ( ĊĠĠĠĠĠ Ġmethod , ĊĠĠĠĠĠ Ġpath Template , ĊĠĠĠĠĠ Ġpath Parameters , ĊĠĠĠĠĠ Ġquery Parameters , ĊĠĠĠĠĠ Ġbody , ĊĠĠĠĠĠ Ġbody Type , ĊĠĠĠĠĠ Ġcontent Types , ĊĠĠĠĠĠ Ġaccept Types , ĊĠĠĠĠĠ Ġheaders ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġfun Ġ< D Ġ: ĠAny > Ġevent Stream ( ĊĠĠĠ Ġmethod : ĠMethod , ĊĠĠĠ Ġpath Template : ĠString , ĊĠĠĠ Ġpath Parameters : ĠParameters ? Ġ= Ġnull , ĊĠĠĠ Ġquery Parameters : ĠParameters ? Ġ= Ġnull , ĊĠĠĠ Ġcontent Types : ĠList < MediaType >? Ġ= Ġnull , ĊĠĠĠ Ġaccept Types : ĠList < MediaType >? Ġ= Ġnull , ĊĠĠĠ Ġheaders : ĠParameters ? Ġ= Ġnull , ĊĠĠĠ Ġevent Types : ĠMap < String , ĠK Type > ĊĠ Ġ): ĠFlow < D > Ġ= Ġevent Stream ( event Types ) Ġ{ ĊĠĠĠ Ġrequest ( ĊĠĠĠĠĠ Ġmethod , ĊĠĠĠĠĠ Ġpath Template , ĊĠĠĠĠĠ Ġpath Parameters , ĊĠĠĠĠĠ Ġquery Parameters , ĊĠĠĠĠĠ Ġnull Ġas ĠUnit ?, ĊĠĠĠĠĠ ĠtypeOf < Unit >(), ĊĠĠĠĠĠ Ġcontent Types , ĊĠĠĠĠĠ Ġaccept Types , ĊĠĠĠĠĠ Ġheaders ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġprotected Ġabstract Ġfun Ġ< D Ġ: ĠAny > Ġevent Stream ( ĊĠĠĠ Ġevent Types : ĠMap < String , ĠK Type >, ĊĠĠĠ Ġrequest Supplier : Ġsuspend Ġ( Headers ) Ġ-> ĠRequest , ĊĠ Ġ): ĠFlow < D > ĊĊĠ Ġabstract Ġfun Ġclose ( cancel Out standing Requests : ĠBoolean ) Ċ } Ċ