package Ġcom . example . andro idth read Ċ Ċ import Ġjava . net . Http URLConnection Ċ import Ġjava . net . URL Ċ Ċ sealed Ġclass ĠResult < out ĠR > Ġ{ ĊĠĠĠ Ġdata Ġclass ĠSuccess < out ĠT >( val Ġdata : ĠT ) Ġ: ĠResult < T >() ĊĠĠĠ Ġdata Ġclass ĠError ( val Ġexception : ĠException ) Ġ: ĠResult < Nothing >() Ċ } Ċ Ċ class ĠLogin Repository ( private Ġval Ġresponse Parser : ĠLogin Response Parser ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval Ġlogin Url Ġ= Ġ" https :// example . com / login " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠFunction Ġthat Ġmakes Ġthe Ġnetwork Ġrequest , Ġblocking Ġthe Ġcurrent Ġthread ĊĠĠĠ Ġfun Ġmake Login Request ( ĊĠĠĠĠĠĠĠ Ġjson Body : ĠString ĊĠĠĠ Ġ): ĠResult < Login Response > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= ĠURL ( login Url ) ĊĠĠĠĠĠĠĠ Ġ( url . open Connection () Ġas ? ĠHttp URLConnection )?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Method Ġ= Ġ" POST " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Request Property (" Content - Type ", Ġ" application / json ; Ġcharset = utf - 8 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Request Property (" Accept ", Ġ" application / json ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Output Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠoutputStream . write ( json Body . toByteArray ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResult . Success ( response Parser . parse ( inputStream )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠResult . Error ( Exception (" Cannot Ġopen ĠHttp URLConnection ")) ĊĠĠĠ Ġ} Ċ Ċ }