package Ġwatch . dependency Ċ Ċ import Ġkotlinx . serialization . Decoder Ċ import Ġkotlinx . serialization . K Serializer Ċ import Ġkotlinx . serialization . Primitive Descriptor Ċ import Ġkotlinx . serialization . Primitive Kind Ċ import Ġkotlinx . serialization . Serial Descriptor Ċ import Ġkotlinx . serialization . Serializable Ċ import Ġkotlinx . serialization . Serializer Ċ import Ġnl . adapt ivity . xml util . serialization . XML Ċ import Ġnl . adapt ivity . xml util . serialization . Xml Children Name Ċ import Ġnl . adapt ivity . xml util . serialization . Xml Serial Name Ċ import Ġokhttp 3 . Http Url Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġokhttp 3 . Request Ċ Ċ @ Serializable ( with Ġ= ĠMaven Coordinate Serializer :: class ) Ċ data Ġclass ĠMaven Coordinate ( Ċ ĉ val ĠgroupId : ĠString , Ċ ĉ val Ġartifact Id : ĠString , Ċ ) Ġ{ Ċ ĉ comp anion Ġobject Ġ{ Ċĉ ĉ fun Ġparse ( string : ĠString ): ĠMaven Coordinate Ġ{ Ċĉĉ ĉ val Ġ( coordinate , Ġversion ) Ġ= Ġparse Coordinates ( string ) Ċĉĉ ĉ check ( version Ġ== Ġnull ) Ġ{ Ċĉĉĉ ĉ " Coordinate Ġversion Ġmust Ġnot Ġbe Ġspecified : Ġ'$ string '" Ċĉĉ ĉ } Ċĉĉ ĉ return Ġcoordinate Ċĉ ĉ } Ċ ĉ } Ċ } Ċ Ċ @ Serializer ( for Class Ġ= ĠMaven Coordinate :: class ) Ċ private Ġobject ĠMaven Coordinate Serializer Ġ: ĠK Serializer < Maven Coordinate > Ġ{ Ċ ĉ override Ġval Ġdescriptor : ĠSerial Descriptor Ċĉ ĉ get () Ġ= ĠPrimitive Descriptor (" Maven Coordinate Serializer ", ĠPrimitive Kind . STRING ) ĊĊ ĉ override Ġfun Ġdeserialize ( decoder : ĠDecoder ): ĠMaven Coordinate Ġ{ Ċĉ ĉ return ĠMaven Coordinate . parse ( decoder . decode String ()) Ċ ĉ } Ċ } Ċ Ċ interface ĠMaven Repository Ġ{ Ċ ĉ suspend Ġfun Ġversions ( coordinate : ĠMaven Coordinate ): ĠSet < String > Ċ } Ċ Ċ class ĠMaven 2 Repository ( Ċ ĉ private Ġval Ġokhttp : ĠOk HttpClient , Ċ ĉ private Ġval Ġurl : ĠHttp Url , Ċ ) Ġ: ĠMaven Repository Ġ{ Ċ ĉ override Ġsuspend Ġfun Ġversions ( coordinate : ĠMaven Coordinate ): ĠSet < String > Ġ{ Ċĉ ĉ val Ġ( groupId , Ġartifact Id ) Ġ= Ġcoordinate Ċĉ ĉ val Ġmetadata Url Ġ= Ġurl . resolve ("${ groupId . replace ('.', Ġ'/') }/ $ artifactId / maven - metadata . xml ") !! Ċĉ ĉ val Ġcall Ġ= Ġokhttp . new Call ( Request . Builder (). url ( metadata Url ). build ()) Ċĉ ĉ val Ġbody Ġ= Ġcall . await () Ċĉ ĉ val Ġmetadata Ġ= Ġxml Format . parse ( Artifact Metadata . serializer (), Ġbody ) Ċĉ ĉ return Ġmetadata . version ing . versions . toSet () Ċ ĉ } ĊĊ ĉ private Ġcompanion Ġobject Ġ{ Ċĉ ĉ private Ġval Ġxml Format Ġ= ĠXML Ġ{ Ċĉĉ ĉ unknown Child Handler Ġ= Ġ{ Ġ_, Ġ_, Ġ_, Ġ_ Ġ-> Ġ} Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ @ Serializable Ċ ĉ @ Xml Serial Name (" metadata ", Ġ"", Ġ"") Ċ ĉ private Ġdata Ġclass ĠArtifact Metadata ( Ċĉ ĉ @ Xml Serial Name (" version ing ", Ġ"", Ġ"") Ċĉ ĉ val Ġversioning : ĠVersion ing , Ċ ĉ ) Ġ{ Ċĉ ĉ @ Serializable Ċĉ ĉ data Ġclass ĠVersion ing ( Ċĉĉ ĉ @ Xml Children Name (" version ", Ġ"", Ġ"") Ċĉĉ ĉ val Ġversions : ĠList < String >, Ċĉ ĉ ) Ċ ĉ } Ċ } Ċ