package Ġde . sk yr ising . guardian . gen Ċ Ċ import Ġcom . google . gson .* Ċ import Ġcom . google . gson . reflect . Type Token Ċ import Ġde . sk yr ising . guardian . gen . mappings . Mapping Provider Ċ import Ġjava . io . Reader Ċ import Ġjava . lang . reflect . Type Ċ import Ġjava . net . URI Ċ import Ġjava . time . Z onedDateTime Ċ import Ġjava . time . format . DateTime Formatter Ċ Ċ inline Ġfun Ġ< re ified ĠT > Ġtype (): ĠType Ġ= Ġ( object Ġ: ĠType Token < T >() Ġ{}). type Ċ Ċ inline Ġfun Ġ< re ified ĠT > ĠGson . fromJson ( reader : ĠReader ): ĠT Ġ{ ĊĠĠĠ Ġreturn Ġthis . fromJson ( reader , Ġtype < T >()) Ċ } Ċ inline Ġfun Ġ< re ified ĠT > ĠGson . fromJson ( el : ĠJson Element ): ĠT Ġ{ ĊĠĠĠ Ġreturn Ġthis . fromJson ( el , Ġtype < T >()) Ċ } Ċ inline Ġfun Ġ< re ified ĠT > ĠGson . fromJson ( json : ĠString ): ĠT Ġ{ ĊĠĠĠ Ġreturn Ġthis . fromJson ( json , Ġtype < T >()) Ċ } Ċ Ċ inline Ġfun Ġ< re ified ĠE Ġ: ĠJson Element , Ġre ified ĠT > ĠGson Builder . register Type Adapter ( cross inline Ġde serializer : Ġ( E , ĠType , ĠJson Deserialization Context ) Ġ-> ĠT ): ĠGson Builder Ġ{ ĊĠĠĠ Ġreturn Ġthis . register Type Adapter ( type < T >(), ĠJson Deserializer Ġ{ Ġel , Ġtype , Ġcontext Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( el Ġ! is ĠE ) Ġthrow ĠIllegalArgumentException (" Expected Ġ'${ E :: class . java . simple Name }' ") ĊĠĠĠĠĠĠĠ Ġde serializer ( el , Ġtype , Ġcontext ) ĊĠĠĠ Ġ}) Ċ } Ċ Ċ inline Ġfun Ġ< re ified ĠT > ĠJson Deserialization Context . deserialize ( json Element : ĠJson Element ): ĠT Ġ{ ĊĠĠĠ Ġreturn Ġthis . deserialize ( json Element , Ġtype < T >()) Ċ } Ċ Ċ fun ĠJsonObject . require ( key : ĠString ) Ġ= Ġthis [ key ] Ġ?: Ġthrow ĠIllegalArgumentException ("' $ key ' Ġrequired ") Ċ inline Ġfun Ġ< re ified ĠT > ĠJsonObject . require ( key : ĠString , Ġcontext : ĠJson Deserialization Context ) Ġ= Ġcontext . deserialize < T >( require ( key )) Ċ inline Ġoperator Ġfun Ġ< re ified ĠT > ĠJsonObject . get ( key : ĠString , Ġcontext : ĠJson Deserialization Context ) Ġ= Ġget ( key )?. let Ġ{ Ġcontext . deserialize < T >( it ) Ġ} Ċ Ċ data Ġclass ĠConfig ( val Ġgit : ĠGit Config , Ġval Ġsources : ĠS ources Config , Ġval Ġbranches : ĠBr anches Config , Ġval Ġde comp ilers : ĠDe compiler Map ?) Ċ data Ġclass ĠGit Config ( val Ġorigin : ĠString , Ġval Ġauthor : ĠGit Person , Ġval Ġcommit ter : ĠGit Person ) Ċ data Ġclass ĠGit Person ( val Ġname : ĠString , Ġval Ġemail : ĠString ) Ċ type alias ĠS ources Config Ġ= ĠMap < String , ĠSource Config > Ċ type alias ĠBr anches Config Ġ= ĠMap < String , ĠBranch Config > Ċ data Ġclass ĠSource Config ( val Ġmappings : ĠMapping Provider , Ġval Ġde compiler : ĠDe compiler , Ġval Ġpost Processors : ĠList < Post Processor >) Ċ data Ġclass ĠBranch Config ( val Ġsource : ĠString , Ġval Ġhead : ĠString ?, Ġval Ġbase : ĠString ?, Ġval Ġfilter : ĠFilter Config ) Ċ data Ġclass ĠFilter Config ( val Ġtype : ĠString ?, Ġval Ġexclude : ĠList < String >) Ġ: ĠFunction 1 < VersionInfo , ĠBoolean > Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġinvoke ( version : ĠVersion Info ) Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġtype Ġ!= Ġnull Ġ&& Ġversion . type Ġ!= Ġtype Ġ-> Ġfalse ĊĠĠĠĠĠĠĠ Ġexclude . contains ( version . id ) Ġ-> Ġfalse ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ data Ġclass ĠArtifact Spec ( val Ġgroup : ĠString , Ġval Ġid : ĠString , Ġval Ġversion : ĠString , Ġval Ġclassifier : ĠString ? Ġ= Ġnull ) Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( classifier Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ group :$ id :$ version :$ classifier " ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ group :$ id :$ version " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġof ( spec : ĠString ): ĠArtifact Spec Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparts Ġ= Ġspec . split (": ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parts . size Ġ== Ġ 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠArtifact Spec ( parts [ 0 ], Ġparts [ 1 ], Ġparts [ 2 ], Ġparts [ 3 ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parts . size Ġ!= Ġ 3 ) Ġthrow ĠIllegalArgumentException (" Expected Ġgroup : id : version , Ġgot Ġ'$ spec '") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠArtifact Spec ( parts [ 0 ], Ġparts [ 1 ], Ġparts [ 2 ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ data Ġclass ĠMaven Artifact ( val Ġmaven Url : ĠURI , Ġval Ġartifact : ĠArtifact Spec ) Ġ{ ĊĠĠĠ Ġfun ĠgetPath (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġartifact Ġ= Ġartifact ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġartifact . id ĊĠĠĠĠĠĠĠ Ġval Ġversion Ġ= Ġartifact . version ĊĠĠĠĠĠĠĠ Ġval Ġversion A Ġ= Ġversion . substring Before ('/') ĊĠĠĠĠĠĠĠ Ġval Ġversion B Ġ= Ġversion . substring After ('/') ĊĠĠĠĠĠĠĠ Ġval Ġclassifier Ġ= Ġartifact . classifier ?. let Ġ{ Ġ"- $ it " Ġ} Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġreturn Ġ"${ artifact . group . replace ('.', Ġ'/') }/ $ id /$ version A /$ id -$ version B $ classifier . jar " ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġget URL (): ĠURI Ġ= Ġmaven Url . resolve ( getPath ()) Ċ } Ċ data Ġclass ĠDe compiler Map ( val Ġmap : ĠMap < De compiler , ĠList < Maven Artifact >>) Ċ Ċ val ĠG SON : ĠGson Ġ= ĠGson Builder () ĊĠĠĠ Ġ. register Type Adapter < JsonObject , ĠGit Config > Ġ{ Ġobj , Ġ_, Ġcontext Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġorigin : ĠString Ġ= Ġobj . require (" origin ", Ġcontext ) ĊĠĠĠĠĠĠĠ Ġval Ġauthor : ĠGit Person ? Ġ= Ġobj [" author ", Ġcontext ] ĊĠĠĠĠĠĠĠ Ġval Ġcommit ter : ĠGit Person ? Ġ= Ġobj [" commit ter ", Ġcontext ] ĊĠĠĠĠĠĠĠ Ġif Ġ( author Ġ== Ġnull Ġ&& Ġcommit ter Ġ== Ġnull ) Ġthrow ĠIllegalArgumentException (" Need Ġat Ġleast Ġone Ġof Ġ' author ' Ġor Ġ' commit ter '") ĊĠĠĠĠĠĠĠ ĠGit Config ( origin , Ġ( author Ġ?: Ġcommit ter ) !! , Ġ( commit ter Ġ?: Ġauthor ) !! ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġ. register Type Adapter < JsonObject , ĠBranch Config > Ġ{ Ġobj , Ġ_, Ġcontext Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġsource : ĠString Ġ= Ġobj . require (" source ", Ġcontext ) ĊĠĠĠĠĠĠĠ Ġval Ġhead : ĠString ? Ġ= Ġobj [" head ", Ġcontext ] ĊĠĠĠĠĠĠĠ Ġval Ġbase : ĠString ? Ġ= Ġobj [" base ", Ġcontext ] ĊĠĠĠĠĠĠĠ Ġval Ġfilter : ĠFilter Config Ġ= Ġobj [" filter ", Ġcontext ] Ġ?: ĠFilter Config ( null , ĠlistOf ()) ĊĠĠĠĠĠĠĠ ĠBranch Config ( source , Ġhead , Ġbase , Ġfilter ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġ. register Type Adapter < JsonObject , ĠFilter Config > Ġ{ Ġobj , Ġ_, Ġcontext Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġtype : ĠString ? Ġ= Ġobj [" type ", Ġcontext ] ĊĠĠĠĠĠĠĠ Ġval Ġexclude : ĠList < String > Ġ= Ġobj [" exclude ", Ġcontext ] Ġ?: ĠlistOf () ĊĠĠĠĠĠĠĠ ĠFilter Config ( type , Ġexclude ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġ. register Type Adapter < JsonObject , ĠSource Config > Ġ{ Ġobj , Ġ_, Ġcontext Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġmappings : ĠMapping Provider Ġ= Ġobj . require (" mappings ", Ġcontext ) ĊĠĠĠĠĠĠĠ Ġval Ġde compiler : ĠDe compiler Ġ= Ġobj . require (" de compiler ", Ġcontext ) ĊĠĠĠĠĠĠĠ Ġval Ġpost Processors Ġ= Ġmutable ListOf < Post Processor >() ĊĠĠĠĠĠĠĠ Ġval Ġprocess Structures Ġ= Ġobj [" process Structures ", Ġcontext ] Ġ?: Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( process Structures ) Ġpost Processors . add ( STRUCTURE _ PROCESS OR ) ĊĠĠĠĠĠĠĠ Ġval Ġprocess Sources Ġ= Ġobj [" process Sources ", Ġcontext ] Ġ?: Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( process Sources ) Ġpost Processors . add ( SOURCE _ PROCESS OR ) ĊĠĠĠĠĠĠĠ ĠSource Config ( mappings , Ġde compiler , Ġpost Processors ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġ. register Type Adapter < JsonObject , ĠVersion Info > Ġ{ Ġobj , Ġ_, Ġcontext Ġ-> ĊĠĠĠĠĠĠĠ Ġvar Ġid : ĠString Ġ= Ġobj . require (" id ", Ġcontext ) ĊĠĠĠĠĠĠĠ Ġif Ġ( obj . has (" om ni Id ")) Ġid Ġ= Ġobj . require (" om ni Id ", Ġcontext ) ĊĠĠĠĠĠĠĠ ĠVersion Info ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj . require (" type ", Ġcontext ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj . require (" url ", Ġcontext ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj . require (" time ", Ġcontext ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj . require (" release Time ", Ġcontext ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġ. register Type Adapter < JsonObject , ĠDe compiler Map > Ġ{ Ġobj , Ġ_, Ġcontext Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġmutable Map Of < De compiler , ĠList < Maven Artifact >>() ĊĠĠĠĠĠĠĠ Ġfor Ġ( key Ġin Ġobj . keySet ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġde compiler Ġ= Ġget De compiler ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġobj [ key ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarr Ġ= Ġif Ġ( value . is JsonArray ) Ġvalue . as JsonArray . toList () Ġelse ĠlistOf ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġartifacts Ġ= Ġarr . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . is JsonObject ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . deserialize ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMaven Artifact ( MA VEN _ C ENTR AL , Ġcontext . deserialize ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ de compiler ] Ġ= Ġartifacts ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠDe compiler Map ( map ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġ. register Type Adapter < JsonObject , ĠMaven Artifact > Ġ{ Ġobj , Ġ_, Ġcontext Ġ-> ĊĠĠĠĠĠĠĠ ĠMaven Artifact ( URI ( obj . require (" url ", Ġcontext )), Ġobj . require (" artifact ", Ġcontext )) ĊĠĠĠ Ġ} ĊĠĠĠ Ġ. register Type Adapter < Json Primitive , ĠMapping Provider > Ġ{ Ġprim , Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġs Ġ= Ġprim . asString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" moj ang " Ġ-> ĠMapping Provider . MO J ANG ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" fabric - inter medi ary " Ġ-> ĠMapping Provider . FAB RIC _ INTER MEDI ARY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" legacy - inter medi ary " Ġ-> ĠMapping Provider . LEG ACY _ INTER MEDI ARY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" qu ilt - inter medi ary " Ġ-> ĠMapping Provider . QU IL T _ INTER MEDI ARY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" Unknown Ġmapping Ġprovider Ġ'$ s '") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġ. register Type Adapter < Json Primitive , ĠDe compiler > Ġ{ Ġprim , Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠ Ġget De compiler ( prim . asString ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġ. register Type Adapter < Json Primitive , ĠArtifact Spec > Ġ{ Ġprim , Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠ ĠArtifact Spec . of ( prim . asString ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġ. register Type Adapter < Json Primitive , ĠZ onedDateTime > Ġ{ Ġprim , Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠ ĠDateTime Formatter . ISO _ OFFSET _ DATE _ TIME . parse ( prim . asString , ĠZ onedDateTime :: from ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġ. create () Ċ Ċ fun Ġget De compiler ( id : ĠString ) Ġ= Ġwhen Ġ( id ) Ġ{ ĊĠĠĠ Ġ" cf r " Ġ-> ĠDe compiler . C FR ĊĠĠĠ Ġ" fer n flower " Ġ-> ĠDe compiler . F ERN FLOW ER ĊĠĠĠ Ġ" forge flower " Ġ-> ĠDe compiler . FOR GE FLOW ER ĊĠĠĠ Ġ" fab rif lower " Ġ-> ĠDe compiler . FAB R IF LOWER ĊĠĠĠ Ġ" qu ilt flower " Ġ-> ĠDe compiler . QU IL TF LOWER ĊĠĠĠ Ġ" pro cy on " Ġ-> ĠDe compiler . PROC Y ON ĊĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" Unknown Ġde compiler Ġ'$ id '") Ċ }