// ĠCopyright Ġ( c ) Ġ 2 0 2 0 ĠA dev int a . Ċ // Ċ // ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ // Ċ // ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ // Ċ // ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE ĠSOFTWARE . Ċ Ċ package Ġcom . ade vint a . oss . zo e . cli . commands Ċ Ċ import Ġcom . ade vint a . oss . zo e . cli . commands . Deploy Schema . Subject Name Strategy Enum .* Ċ import Ġcom . ade vint a . oss . zo e . cli . utils . fetch Ċ import Ġcom . ade vint a . oss . zo e . core . functions . Schema Content Ċ import Ġcom . ade vint a . oss . zo e . core . functions . Schema Content . Av dl Schema Ċ import Ġcom . ade vint a . oss . zo e . core . functions . Schema Content . Av sc Schema Ċ import Ġcom . ade vint a . oss . zo e . core . functions . Subject Name Strategy Ċ import Ġcom . ade vint a . oss . zo e . core . functions . Topic Name Strategy Suffix Ċ import Ġcom . ade vint a . oss . zo e . core . utils . toJson Node Ċ import Ġcom . ade vint a . oss . zo e . service . Z oe Service Ċ import Ġcom . ade vint a . oss . zo e . service . utils . user Error Ċ import Ġcom . github . aj alt . cli kt . core . Cli kt Command Ċ import Ġcom . github . aj alt . cli kt . core . sub commands Ċ import Ġcom . github . aj alt . cli kt . parameters . arguments . argument Ċ import Ġcom . github . aj alt . cli kt . parameters . arguments . optional Ċ import Ġcom . github . aj alt . cli kt . parameters . options . default Ċ import Ġcom . github . aj alt . cli kt . parameters . options . flag Ċ import Ġcom . github . aj alt . cli kt . parameters . options . option Ċ import Ġcom . github . aj alt . cli kt . parameters . options . switch Ċ import Ġcom . github . aj alt . cli kt . parameters . types . choice Ċ import Ġcom . github . aj alt . cli kt . parameters . types . file Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . Flow Preview Ċ import Ġkotlinx . coroutines . flow . first Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . k oin . core . K oin Component Ċ import Ġorg . k oin . core . inject Ċ import Ġjava . io . InputStream Ċ Ċ @ Experimental Cor outines Api Ċ @ Flow Preview Ċ class ĠS chemas Command Ġ: ĠCli kt Command ( ĊĠĠĠ Ġname Ġ= Ġ" schemas ", ĊĠĠĠ Ġhelp Ġ= Ġ" List , Ġdescribe Ġor Ġdeploy Ġschemas ", ĊĠĠĠ Ġprint Help On Empty Args Ġ= Ġtrue Ċ ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġrun () Ġ{} Ċ } Ċ Ċ @ Flow Preview Ċ @ Experimental Cor outines Api Ċ class ĠList Schemas Ġ: ĠCli kt Command ( name Ġ= Ġ" list "), ĠK oin Component Ġ{ ĊĠĠĠ Ġprivate Ġval Ġctx Ġby Ġinject < Cli Context >() ĊĠĠĠ Ġprivate Ġval Ġservice Ġby Ġinject < Z oe Service >() ĊĊĠĠĠ Ġoverride Ġfun Ġrun () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcluster Ġ= Ġctx . require Cluster () ĊĠĠĠĠĠĠĠ Ġval Ġsubjects Ġ= Ġservice . list Schemas ( cluster ). subjects . map Ġ{ Ġit . subject Ġ} ĊĠĠĠĠĠĠĠ Ġctx . term . output . format ( map Of (" subjects " Ġto Ġsubjects ). toJson Node ()) Ġ{ Ġecho ( it ) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Flow Preview Ċ @ Experimental Cor outines Api Ċ class ĠDescribe Schema Ġ: ĠCli kt Command ( name Ġ= Ġ" describe "), ĠK oin Component Ġ{ ĊĠĠĠ Ġprivate Ġval Ġsubject : ĠString Ġby Ġargument (" subject ", Ġhelp Ġ= Ġ" Subject Ġname Ġto Ġdescribe ") ĊĊĠĠĠ Ġprivate Ġval Ġctx Ġby Ġinject < Cli Context >() ĊĠĠĠ Ġprivate Ġval Ġservice Ġby Ġinject < Z oe Service >() ĊĊĠĠĠ Ġoverride Ġfun Ġrun () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcluster Ġ= Ġctx . require Cluster () ĊĠĠĠĠĠĠĠ Ġval Ġsubject Ġ= Ġservice . list Schemas ( cluster ). subjects . find Ġ{ Ġit . subject Ġ== Ġsubject Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġuser Error (" subject Ġnot Ġfound Ġ: Ġ$ subject ") ĊĊĠĠĠĠĠĠĠ Ġctx . term . output . format ( subject . toJson Node ()) Ġ{ Ġecho ( it ) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Flow Preview Ċ @ Experimental Cor outines Api Ċ class ĠDeploy Schema Ġ: ĠCli kt Command ( ĊĠĠĠ Ġname Ġ= Ġ" deploy ", ĊĠĠĠ Ġhelp Ġ= Ġ""" ĊĠĠĠĠĠĠĠ ĠDeploy Ġa Ġschema Ġto Ġthe Ġregistry ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ ĠExamples Ġ: ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġ> Ġz oe Ġ- q Ġschemas Ġdeploy Ġ-- av dl Ġ-- from - file Ġschema . av dl Ġ-- name ĠSer en ity Result ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġ{" type ":" actual "," id ": 2 1 ," subject ":" com . sch ib st ed . ser en ity . ad . v 1 . Module Reason "} ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġ> Ġz oe Ġschemas Ġdeploy Ġ-- av dl Ġ-- from - file Ġschema . av dl Ġ-- name ĠModule Reason Ġ-- strategy Ġtopic Record Ġ-- topic Ġinput ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġ{" type ":" actual "," id ": 2 1 ," subject ":" tenant - input - topic - com . sch ib st ed . ser en ity . ad . v 1 . Module Reason "} ĊĠĠĠ Ġ"" ", ĊĠĠĠ Ġprint Help On Empty Args Ġ= Ġtrue Ċ ), ĠK oin Component Ġ{ ĊĊĠĠĠ Ġenum Ġclass ĠSubject Name Strategy Enum Ġ{ ĠTopic , ĠRecord , ĠTopic Record Ġ} ĊĠĠĠ Ġenum Ġclass ĠSchema Type Ġ{ ĠAv sc , ĠAv dl Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġstrategy ĊĠĠĠĠĠĠĠĠĠĠĠ Ġby Ġoption ("-- strategy ", Ġhelp Ġ= Ġ" Subject Ġnaming Ġstrategy ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. choice (" topic " Ġto ĠTopic , Ġ" record " Ġto ĠRecord , Ġ" topic Record " Ġto ĠTopic Record ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. default ( Record ) ĊĊĠĠĠ Ġprivate Ġval Ġfrom Std in Ġby Ġoption ("-- from - stdin ", Ġhelp Ġ= Ġ" Consume Ġdata Ġfrom Ġstdin "). flag ( default Ġ= Ġfalse ) ĊĠĠĠ Ġprivate Ġval Ġfrom File ĊĠĠĠĠĠĠĠĠĠĠĠ Ġby Ġoption ("-- from - file ", Ġhelp Ġ= Ġ" Consume Ġdata Ġfrom Ġa Ġjson Ġfile ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. file ( exists Ġ= Ġtrue , Ġfile Ok ay Ġ= Ġtrue , Ġreadable Ġ= Ġtrue ) ĊĊĠĠĠ Ġprivate Ġval Ġtopic Ġby Ġoption ("-- topic ", Ġhelp Ġ= Ġ" Target Ġtopic ") ĊĠĠĠ Ġprivate Ġval Ġsuffix ĊĠĠĠĠĠĠĠĠĠĠĠ Ġby Ġoption ("-- suffix ", Ġhelp Ġ= Ġ" Suffix Ġfor Ġsubject Ġname ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. choice ( Topic Name Strategy Suffix . values (). map Ġ{ Ġit . code Ġto Ġit Ġ}. toMap ()) ĊĊĠĠĠ Ġprivate Ġval Ġcontent Ġby Ġargument (" schema ", Ġhelp Ġ= Ġ" Schema Ġjson Ġcontent "). optional () ĊĊĠĠĠ Ġprivate Ġval Ġtype ĊĠĠĠĠĠĠĠĠĠĠĠ Ġby Ġoption (). switch ( Schema Type . values (). map Ġ{ Ġ"-- ${ it . name . toLowerCase () }" Ġto Ġit Ġ}. toMap ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. default ( Schema Type . Av sc ) ĊĊĠĠĠ Ġprivate Ġval Ġname ĊĠĠĠĠĠĠĠĠĠĠĠ Ġby Ġoption ("-- name ", Ġhelp Ġ= Ġ" Name Ġof Ġthe Ġschema Ġin Ġthe Ġav dl Ġfile Ġ( required Ġwhen Ġusing Ġ-- av dl )") ĊĊĠĠĠ Ġprivate Ġval Ġdry Run Ġby Ġoption ("-- dry - run ", Ġhelp Ġ= Ġ" Do Ġnot Ġactually Ġcreate Ġthe Ġschema "). flag ( default Ġ= Ġfalse ) ĊĊĠĠĠ Ġprivate Ġval Ġctx Ġby Ġinject < Cli Context >() ĊĠĠĠ Ġprivate Ġval Ġservice Ġby Ġinject < Z oe Service >() ĊĊĠĠĠ Ġoverride Ġfun Ġrun () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstrategy : ĠSubject Name Strategy Ġ= Ġstrategy . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTopic Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire NotNull ( topic ) Ġ{ Ġ"-- topic Ġneeds Ġto Ġbe Ġsupplied Ġwhen Ġusing Ġstrategy Ġ: Ġ$ it " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire NotNull ( suffix ) Ġ{ Ġ"-- suffix Ġneeds Ġto Ġbe Ġsupplied Ġwhen Ġusing Ġstrategy Ġ: Ġ$ it " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSubject Name Strategy . Topic Name Strategy ( topic !! , Ġsuffix !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRecord Ġ-> ĠSubject Name Strategy . Record Name Strategy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTopic Record Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire NotNull ( topic ) Ġ{ Ġ"-- topic Ġneeds Ġto Ġbe Ġsupplied Ġwhen Ġusing Ġstrategy Ġ: Ġ$ it " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSubject Name Strategy . Topic Record Name Strategy ( topic !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġschema : ĠSchema Content Ġ= Ġkotlin . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinput : ĠInputStream Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Std in Ġ-> ĠSystem .` in ` ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom File Ġ!= Ġnull Ġ-> Ġfrom File !!. inputStream () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Ġ!= Ġnull Ġ-> Ġcontent !!. byte InputStream ( Charsets . UTF _ 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġuser Error (" supply Ġthe Ġschema Ġas Ġan Ġargument Ġor Ġuse Ġone Ġof Ġ: Ġ'-- from - stdin ', Ġ'-- from - file '") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= Ġfetch ( input , Ġstreaming Ġ= Ġfalse ). first () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSchema Type . Av sc Ġ-> ĠAv sc Schema ( content ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSchema Type . Av dl Ġ-> ĠAv dl Schema ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent , Ġname Ġ?: Ġuser Error ("-- name Ġis Ġrequired Ġwhen Ġusing Ġ'$ type '") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcluster Ġ= Ġctx . require Cluster () ĊĠĠĠĠĠĠĠ Ġval Ġsubject Ġ= Ġservice . deploy Schema ( cluster , Ġschema , Ġstrategy , Ġdry Run ) ĊĊĠĠĠĠĠĠĠ Ġctx . term . output . format ( subject . toJson Node ()) Ġ{ Ġecho ( it ) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Flow Preview Ċ @ Experimental Cor outines Api Ċ fun Ġschemas Command () Ġ= ĠS chemas Command (). sub commands ( ĊĠĠĠ ĠList Schemas (), ĊĠĠĠ ĠDescribe Schema (), ĊĠĠĠ ĠDeploy Schema () Ċ ) Ċ