/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 8 ĠSquare , Ġ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 Ġcom . squareup . wire . kotlin Ċ Ċ import Ġcom . squareup . kotlin po et . File Spec Ċ import Ġcom . squareup . wire . kotlin . Kotlin Generator . Companion . sanitize K doc Ċ import Ġcom . squareup . wire . schema . P run ing Rules Ċ import Ġcom . squareup . wire . schema . Repo Builder Ċ import Ġkotlin . test . Test Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assertTrue Ċ import Ġkotlin . text . Regex Option . DOT _ MATCH ES _ ALL Ċ Ċ class ĠKotlin Generator Test Ġ{ ĊĠ Ġ@ Test Ġfun Ġbasic () Ġ{ ĊĠĠĠ Ġval Ġrepo Builder Ġ= ĠRepo Builder () ĊĠĠĠĠĠĠĠ Ġ. add (" message . proto ", Ġ""" ĊĠĠĠĠĠĠĠ Ġ| message ĠPerson Ġ{ ĊĠĠĠĠĠĠĠ Ġ| ĉ required Ġstring Ġname Ġ= Ġ 1 ; ĊĠĠĠĠĠĠĠ Ġ| ĉ required Ġint 3 2 Ġid Ġ= Ġ 2 ; ĊĠĠĠĠĠĠĠ Ġ| ĉ optional Ġstring Ġemail Ġ= Ġ 3 ; ĊĠĠĠĠĠĠĠ Ġ| ĉ enum ĠPhone Type Ġ{ ĊĠĠĠĠĠĠĠ Ġ| ĉ ĉ HOME Ġ= Ġ 0 ; ĊĠĠĠĠĠĠĠ Ġ| ĉ ĉ WORK Ġ= Ġ 1 ; ĊĠĠĠĠĠĠĠ Ġ| ĉ ĉ MOB ILE Ġ= Ġ 2 ; ĊĠĠĠĠĠĠĠ Ġ| ĉ } ĊĠĠĠĠĠĠĠ Ġ| ĉ message ĠPhone Number Ġ{ ĊĠĠĠĠĠĠĠ Ġ| ĉ ĉ required Ġstring Ġnumber Ġ= Ġ 1 ; ĊĠĠĠĠĠĠĠ Ġ| ĉ ĉ optional ĠPhone Type Ġtype Ġ= Ġ 2 Ġ[ default Ġ= ĠHOME ]; ĊĠĠĠĠĠĠĠ Ġ| ĉ } ĊĠĠĠĠĠĠĠ Ġ| ĉ repeated ĠPhone Number Ġphone Ġ= Ġ 4 ; ĊĠĠĠĠĠĠĠ Ġ| } """. trim Margin ()) ĊĠĠĠ Ġval Ġcode Ġ= Ġrepo Builder . generate Kotlin (" Person "). replace ("\ n ", Ġ"") ĊĠĠĠ ĠassertTrue ( code . contains (" class ĠPerson ")) ĊĠĠĠ ĠassertTrue ( code . contains (" object Ġ: ĠProto Adapter < PhoneNumber >(" )) ĊĠĠĠ ĠassertTrue ( code . contains (" Field Encoding . LENGTH _ DE LIMIT ED ")) ĊĠĠĠ ĠassertTrue ( code . contains (" PhoneNumber :: class ")) ĊĠĠĠ ĠassertTrue ( code . contains (" override Ġfun Ġencode ( writer : ĠProto Writer , Ġvalue : ĠPerson ) ")) ĊĠĠĠ ĠassertTrue ( code . contains (" enum Ġclass ĠPhone Type ( ĠĠĠ Ġpublic Ġoverride Ġval Ġvalue : ĠInt Ġ Ġ) Ġ: ĠWire Enum ")) ĊĠĠĠ ĠassertTrue ( code . contains (" fun Ġfrom Value ( value : ĠInt ): ĠPhone Type ? ")) ĊĠĠĠ ĠassertTrue ( code . contains (" WORK ( 1 ), ")) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġdefault Values () Ġ{ ĊĠĠĠ Ġval Ġrepo Builder Ġ= ĠRepo Builder () ĊĠĠĠĠĠĠĠ Ġ. add (" message . proto ", Ġ""" ĊĠĠĠĠĠĠĠ Ġ| message ĠMessage Ġ{ ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġoptional Ġint 3 2 Ġa Ġ= Ġ 1 Ġ[ default Ġ= Ġ 1 0 Ġ]; ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġoptional Ġint 3 2 Ġb Ġ= Ġ 2 Ġ[ default Ġ= Ġ 0 x 2 0 Ġ]; ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġoptional Ġint 6 4 Ġc Ġ= Ġ 3 Ġ[ default Ġ= Ġ 1 1 Ġ]; ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġoptional Ġint 6 4 Ġd Ġ= Ġ 4 Ġ[ default Ġ= Ġ 0 x 2 1 Ġ]; ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġoptional Ġfloat Ġe Ġ= Ġ 5 Ġ[ default Ġ= Ġ 8 0 6 Ġ]; ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġoptional Ġdouble Ġf Ġ= Ġ 6 Ġ[ default Ġ= Ġ- 0 ]; ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġoptional Ġdouble Ġg Ġ= Ġ 7 Ġ[ default Ġ= Ġ 0 . 0 ]; ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġoptional Ġdouble Ġh Ġ= Ġ 8 Ġ[ default Ġ= Ġ- 1 . 0 ]; ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġoptional Ġdouble Ġi Ġ= Ġ 9 Ġ[ default Ġ= Ġ 1 e 1 0 ]; ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġoptional Ġdouble Ġj Ġ= Ġ 1 0 Ġ[ default Ġ= Ġ- 1 e - 2 ]; ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġoptional Ġdouble Ġk Ġ= Ġ 1 1 Ġ[ default Ġ= Ġ- 1 . 2 3 e 4 5 ]; ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġoptional Ġdouble Ġl Ġ= Ġ 1 2 Ġ[ default Ġ= Ġ 2 5 5 ]; ĊĠĠĠĠĠĠĠ Ġ| } """. trim Margin ()) ĊĠĠĠ Ġval Ġcode Ġ= Ġrepo Builder . generate Kotlin (" Message ") ĊĠĠĠ ĠassertTrue ( code . contains (" const Ġval ĠDEFAULT _ A : ĠInt Ġ= Ġ 1 0 ")) ĊĠĠĠ ĠassertTrue ( code . contains (" const Ġval ĠDEFAULT _ B : ĠInt Ġ= Ġ 3 2 ")) ĊĠĠĠ ĠassertTrue ( code . contains (" const Ġval ĠDEFAULT _ C : ĠLong Ġ= Ġ 1 1 L ")) ĊĠĠĠ ĠassertTrue ( code . contains (" const Ġval ĠDEFAULT _ D : ĠLong Ġ= Ġ 3 3 L ")) ĊĠĠĠ ĠassertTrue ( code . contains (" const Ġval ĠDEFAULT _ E : ĠFloat Ġ= Ġ 8 0 6 f ")) ĊĠĠĠ ĠassertTrue ( code . contains (" const Ġval ĠDEFAULT _ F : ĠDouble Ġ= Ġ- 0 . 0 ")) ĊĠĠĠ ĠassertTrue ( code . contains (" const Ġval ĠDEFAULT _ G : ĠDouble Ġ= Ġ 0 . 0 ")) ĊĠĠĠ ĠassertTrue ( code . contains (" const Ġval ĠDEFAULT _ H : ĠDouble Ġ= Ġ- 1 . 0 ")) ĊĠĠĠ ĠassertTrue ( code . contains (" const Ġval ĠDEFAULT _ I : ĠDouble Ġ= Ġ 1 . 0 E 1 0 ")) ĊĠĠĠ ĠassertTrue ( code . contains (" const Ġval ĠDEFAULT _ J : ĠDouble Ġ= Ġ- 0 . 0 1 ")) ĊĠĠĠ ĠassertTrue ( code . contains (" const Ġval ĠDEFAULT _ K : ĠDouble Ġ= Ġ- 1 . 2 3 E 4 5 ")) ĊĠĠĠ ĠassertTrue ( code . contains (" const Ġval ĠDEFAULT _ L : ĠDouble Ġ= Ġ 2 5 5 . 0 ")) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġname Allocator Is Used () Ġ{ ĊĠĠĠ Ġval Ġrepo Builder Ġ= ĠRepo Builder () ĊĠĠĠĠĠĠĠ Ġ. add (" message . proto ", Ġ""" ĊĠĠĠĠĠĠĠ Ġ| message ĠMessage Ġ{ ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġrequired Ġfloat Ġwhen Ġ= Ġ 1 ; ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġrequired Ġint 3 2 ĠAD AP TER Ġ= Ġ 2 ; ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġoptional Ġint 6 4 Ġadapter Ġ= Ġ 3 ; ĊĠĠĠĠĠĠĠ Ġ| } """. trim Margin ()) ĊĠĠĠ Ġval Ġcode Ġ= Ġrepo Builder . generate Kotlin (" Message ") ĊĠĠĠ ĠassertTrue ( code . contains (" val Ġwhen _: ĠFloat ")) ĊĠĠĠ ĠassertTrue ( code . contains (" val ĠAD AP TER _: ĠInt ")) ĊĠĠĠ ĠassertTrue ( code . contains (" val Ġadapter _: ĠLong ? ")) ĊĠĠĠ ĠassertTrue ( code . contains (" var Ġsize Ġ= Ġvalue . unknownFields . size ")) ĊĠĠĠ ĠassertTrue ( code . contains (" size Ġ+= ĠProto Adapter . FLOAT . encoded Size With Tag ( 1 , Ġvalue . when _) ")) ĊĠĠĠ ĠassertTrue ( code . contains (" Proto Adapter . FLOAT . encode With Tag ( writer , Ġ 1 , Ġvalue . when _) ")) ĊĠĠĠ ĠassertTrue ( code . contains (" Proto Adapter . FLOAT . encode With Tag ( writer , Ġ 1 , Ġvalue . when _) ")) ĊĠĠĠ ĠassertTrue ( code . contains (" 1 Ġ-> Ġwhen _ Ġ= ĠProto Adapter . FLOAT . decode ( reader ) ")) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġen closing () Ġ{ ĊĠĠĠ Ġval Ġschema Ġ= ĠRepo Builder () ĊĠĠĠĠĠĠĠ Ġ. add (" message . proto ", Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġ| message ĠA Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġmessage ĠB Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġoptional ĠB Ġb Ġ= Ġ 1 ; ĊĠĠĠĠĠĠĠĠĠ Ġ| } """. trim Margin ()) ĊĠĠĠĠĠĠĠ Ġ. schema () ĊĊĠĠĠ Ġval Ġpr uned Ġ= Ġschema . prune ( P run ing Rules . Builder (). add Root (" A . B "). build ()) ĊĊĠĠĠ Ġval Ġkotlin Generator Ġ= ĠKotlin Generator . invoke ( pr uned ) ĊĠĠĠ Ġval Ġtype Spec Ġ= Ġkotlin Generator . generate Type ( pr uned . getType (" A ") !! ) ĊĠĠĠ Ġval Ġcode Ġ= ĠFile Spec . get ("", Ġtype Spec ). toString () ĊĠĠĠ ĠassertTrue ( code . contains (" class ĠA Ġprivate Ġconstructor () Ġ{ ")) ĊĠĠĠ ĠassertTrue ( code . contains (" class ĠB (.* ) Ġ: ĠMessage < B , ĠNothing >". to Regex ( DOT _ MATCH ES _ ALL ))) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġrequest Response () Ġ{ ĊĠĠĠ Ġval Ġexpected Interface Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġ| package Ġroute guide ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| import Ġcom . squareup . wire . Grpc Call ĊĠĠĠĠĠĠĠĠĠ Ġ| import Ġcom . squareup . wire . Service ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| /** ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ* ĠRoute Guide Ġservice Ġinterface . ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ*/ ĊĠĠĠĠĠĠĠĠĠ Ġ| public Ġinterface ĠRoute Guide Client Ġ: ĠService Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ/** ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ* ĠReturns Ġthe Ġ[ Feature ] Ġfor Ġa Ġ[ Point ]. ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġfun ĠGet Feature (): ĠGr pc Call < Point , ĠFeature > ĊĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠ Ġ| """. trim Margin () ĊĠĠĠ Ġval Ġexpected Implementation Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġ| package Ġroute guide ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| import Ġcom . squareup . wire . Grpc Call ĊĠĠĠĠĠĠĠĠĠ Ġ| import Ġcom . squareup . wire . Grpc Client ĊĠĠĠĠĠĠĠĠĠ Ġ| import Ġcom . squareup . wire . Grpc Method ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| /** ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ* ĠRoute Guide Ġservice Ġinterface . ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ*/ ĊĠĠĠĠĠĠĠĠĠ Ġ| public Ġclass ĠGr pc Route Guide Client ( ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġprivate Ġval Ġclient : ĠGr pc Client ĊĠĠĠĠĠĠĠĠĠ Ġ| ) Ġ: ĠRoute Guide Client Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ/** ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ* ĠReturns Ġthe Ġ[ Feature ] Ġfor Ġa Ġ[ Point ]. ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġoverride Ġfun ĠGet Feature (): ĠGr pc Call < Point , ĠFeature > Ġ= Ġclient . new Call ( Grpc Method ( ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġpath Ġ= Ġ"/ route guide . Route Guide / Get Feature ", ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġrequest Adapter Ġ= ĠPoint . ADAPTER , ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġresponse Adapter Ġ= ĠFeature . ADAPTER ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ)) ĊĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠ Ġ| """. trim Margin () ĊĊĠĠĠ Ġval Ġrepo Builder Ġ= ĠRepo Builder () ĊĠĠĠĠĠĠĠ Ġ. add (" route guide . proto ", Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġ| package Ġroute guide ; ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| // ĠRoute Guide Ġservice Ġinterface . ĊĠĠĠĠĠĠĠĠĠ Ġ| service ĠRoute Guide Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ// ĠReturns Ġthe Ġ[ Feature ] Ġfor Ġa Ġ[ Point ]. ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġrpc ĠGet Feature ( Point ) Ġreturns Ġ( Feature ) Ġ{} ĊĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠ Ġ| $ point Message ĊĠĠĠĠĠĠĠĠĠ Ġ| $ feature Message ĊĠĠĠĠĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠĠĠ ĠassertEquals ( listOf ( expected Interface , Ġexpected Implementation ), ĊĠĠĠĠĠĠĠ Ġrepo Builder . generate Grpc Kotlin (" route guide . Route Guide ")) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġblocking Single Request Single Response () Ġ{ ĊĠĠĠ Ġ// language = kotlin ĊĠĠĠ Ġval Ġexpected Ġ= Ġ""" ĊĠĠĠĠĠĠĠ Ġpackage Ġroute guide ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . wire . Service ĊĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . wire . Wire Rpc ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠRoute Guide Ġservice Ġinterface . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġpublic Ġinterface ĠRoute Guide Blocking Server Ġ: ĠService Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġthe Ġ[ Feature ] Ġfor Ġa Ġ[ Point ]. ĊĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠ Ġ@ Wire Rpc ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath Ġ= Ġ"/ route guide . Route Guide / Get Feature ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Adapter Ġ= Ġ" route guide . Point # ADAPTER ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Adapter Ġ= Ġ" route guide . Feature # ADAPTER " ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġpublic Ġfun ĠGet Feature ( request : ĠPoint ): ĠFeature ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠ Ġval Ġrepo Builder Ġ= ĠRepo Builder () ĊĠĠĠĠĠĠĠ Ġ. add (" route guide . proto ", Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġ| package Ġroute guide ; ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| // ĠRoute Guide Ġservice Ġinterface . ĊĠĠĠĠĠĠĠĠĠ Ġ| service ĠRoute Guide Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ// ĠReturns Ġthe Ġ[ Feature ] Ġfor Ġa Ġ[ Point ]. ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġrpc ĠGet Feature ( Point ) Ġreturns Ġ( Feature ) Ġ{} ĊĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠ Ġ| $ point Message ĊĠĠĠĠĠĠĠĠĠ Ġ| $ feature Message ĊĠĠĠĠĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠĠĠ ĠassertEquals ( listOf ( expected ), Ġrepo Builder . generate Grpc Kotlin (" route guide . Route Guide ", ĊĠĠĠĠĠĠĠ Ġrpc Call Style Ġ= ĠRpc Call Style . BLOCK ING , Ġrpc Role Ġ= ĠRpc Role . SERVER )) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġblocking Streaming Request Single Response () Ġ{ ĊĠĠĠ Ġ// language = kotlin ĊĠĠĠ Ġval Ġexpected Ġ= Ġ""" ĊĠĠĠĠĠĠĠ Ġpackage Ġroute guide ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . wire . Message Source ĊĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . wire . Service ĊĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . wire . Wire Rpc ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠRoute Guide Ġservice Ġinterface . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġpublic Ġinterface ĠRoute Guide Blocking Server Ġ: ĠService Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠ Ġ* ĠCreates Ġa Ġ[ Route Summary ] Ġbased Ġon Ġthe Ġprovided Ġ[ Point ] s . ĊĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠ Ġ@ Wire Rpc ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath Ġ= Ġ"/ route guide . Route Guide / Record Route ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Adapter Ġ= Ġ" route guide . Point # ADAPTER ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Adapter Ġ= Ġ" route guide . Route Summary # ADAPTER " ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġpublic Ġfun ĠRecord Route ( request : ĠMessage Source < Point >): ĠRoute Summary ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠ Ġval Ġrepo Builder Ġ= ĠRepo Builder () ĊĠĠĠĠĠĠĠ Ġ. add (" route guide . proto ", Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġ| package Ġroute guide ; ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| // ĠRoute Guide Ġservice Ġinterface . ĊĠĠĠĠĠĠĠĠĠ Ġ| service ĠRoute Guide Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ// ĠCreates Ġa Ġ[ Route Summary ] Ġbased Ġon Ġthe Ġprovided Ġ[ Point ] s . ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġrpc ĠRecord Route ( stream ĠPoint ) Ġreturns Ġ( Route Summary ) Ġ{} ĊĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠ Ġ| $ point Message ĊĠĠĠĠĠĠĠĠĠ Ġ| $ route Summary Message ĊĠĠĠĠĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠĠĠ ĠassertEquals ( listOf ( expected ), Ġrepo Builder . generate Grpc Kotlin (" route guide . Route Guide ", ĊĠĠĠĠĠĠĠ Ġrpc Call Style Ġ= ĠRpc Call Style . BLOCK ING , Ġrpc Role Ġ= ĠRpc Role . SERVER )) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġblocking Single Request Streaming Response () Ġ{ ĊĠĠĠ Ġ// language = kotlin ĊĠĠĠ Ġval Ġexpected Ġ= Ġ""" ĊĠĠĠĠĠĠĠ Ġpackage Ġroute guide ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . wire . Message Sink ĊĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . wire . Service ĊĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . wire . Wire Rpc ĊĠĠĠĠĠĠĠ Ġimport Ġkotlin . Unit ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠRoute Guide Ġservice Ġinterface . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġpublic Ġinterface ĠRoute Guide Blocking Server Ġ: ĠService Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġthe Ġ[ Feature ] s Ġwithin Ġa Ġ[ Rectangle ]. ĊĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠ Ġ@ Wire Rpc ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath Ġ= Ġ"/ route guide . Route Guide / List Features ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Adapter Ġ= Ġ" route guide . Rectangle # ADAPTER ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Adapter Ġ= Ġ" route guide . Feature # ADAPTER " ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġpublic Ġfun ĠList Features ( request : ĠRectangle , Ġresponse : ĠMessage Sink < Feature >): ĠUnit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠ Ġval Ġrepo Builder Ġ= ĠRepo Builder () ĊĠĠĠĠĠĠĠ Ġ. add (" route guide . proto ", Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġ| package Ġroute guide ; ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| // ĠRoute Guide Ġservice Ġinterface . ĊĠĠĠĠĠĠĠĠĠ Ġ| service ĠRoute Guide Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ// ĠReturns Ġthe Ġ[ Feature ] s Ġwithin Ġa Ġ[ Rectangle ]. ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġrpc ĠList Features ( Rectangle ) Ġreturns Ġ( stream ĠFeature ) Ġ{} ĊĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠ Ġ| $ point Message ĊĠĠĠĠĠĠĠĠĠ Ġ| $ rect ange Message ĊĠĠĠĠĠĠĠĠĠ Ġ| $ feature Message ĊĠĠĠĠĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠĠĠ ĠassertEquals ( listOf ( expected ), Ġrepo Builder . generate Grpc Kotlin (" route guide . Route Guide ", ĊĠĠĠĠĠĠĠ Ġrpc Call Style Ġ= ĠRpc Call Style . BLOCK ING , Ġrpc Role Ġ= ĠRpc Role . SERVER )) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġblocking Streaming Request Streaming Response () Ġ{ ĊĠĠĠ Ġ// language = kotlin ĊĠĠĠ Ġval Ġexpected Ġ= Ġ""" ĊĠĠĠĠĠĠĠ Ġpackage Ġroute guide ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . wire . Message Sink ĊĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . wire . Message Source ĊĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . wire . Service ĊĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . wire . Wire Rpc ĊĠĠĠĠĠĠĠ Ġimport Ġkotlin . Unit ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠRoute Guide Ġservice Ġinterface . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġpublic Ġinterface ĠRoute Guide Blocking Server Ġ: ĠService Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠ Ġ* ĠChat Ġwith Ġsomeone Ġusing Ġa Ġ[ Route Note ]. ĊĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠ Ġ@ Wire Rpc ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath Ġ= Ġ"/ route guide . Route Guide / Route Chat ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Adapter Ġ= Ġ" route guide . Route Note # ADAPTER ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Adapter Ġ= Ġ" route guide . Route Note # ADAPTER " ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġpublic Ġfun ĠRoute Chat ( request : ĠMessage Source < Route Note >, Ġresponse : ĠMessage Sink < Route Note >): ĠUnit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠ Ġval Ġrepo Builder Ġ= ĠRepo Builder () ĊĠĠĠĠĠĠĠ Ġ. add (" route guide . proto ", Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġ| package Ġroute guide ; ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| /** ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ* ĠRoute Guide Ġservice Ġinterface . ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ*/ ĊĠĠĠĠĠĠĠĠĠ Ġ| service ĠRoute Guide Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ// ĠChat Ġwith Ġsomeone Ġusing Ġa Ġ[ Route Note ]. ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġrpc ĠRoute Chat ( stream ĠRoute Note ) Ġreturns Ġ( stream ĠRoute Note ) Ġ{} ĊĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠ Ġ| $ point Message ĊĠĠĠĠĠĠĠĠĠ Ġ| $ rect ange Message ĊĠĠĠĠĠĠĠĠĠ Ġ| $ route Note Message ĊĠĠĠĠĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠĠĠ ĠassertEquals ( listOf ( expected ), Ġrepo Builder . generate Grpc Kotlin (" route guide . Route Guide ", ĊĠĠĠĠĠĠĠ Ġrpc Call Style Ġ= ĠRpc Call Style . BLOCK ING , Ġrpc Role Ġ= ĠRpc Role . SERVER )) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġjava Package Option () Ġ{ ĊĠĠĠ Ġ// ĠNote Ġthat Ġthe Ġ@ Wire Rpc Ġpath Ġdoes Ġnot Ġuse Ġthe ĠJava Ġpackage Ġoption . ĊĠĠĠ Ġ// language = kotlin ĊĠĠĠ Ġval Ġexpected Ġ= Ġ""" ĊĠĠĠĠĠĠĠ Ġpackage Ġcom . squareup . route guide ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . wire . Service ĊĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . wire . Wire Rpc ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠRoute Guide Ġservice Ġinterface . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġpublic Ġinterface ĠRoute Guide Blocking Server Ġ: ĠService Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġthe Ġ[ Feature ] Ġfor Ġa Ġ[ Point ]. ĊĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠ Ġ@ Wire Rpc ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath Ġ= Ġ"/ route guide . Route Guide / Get Feature ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Adapter Ġ= Ġ" com . squareup . route guide . Point # ADAPTER ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Adapter Ġ= Ġ" com . squareup . route guide . Feature # ADAPTER " ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġpublic Ġfun ĠGet Feature ( request : ĠPoint ): ĠFeature ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠ Ġval Ġrepo Builder Ġ= ĠRepo Builder () ĊĠĠĠĠĠĠĠ Ġ. add (" route guide . proto ", Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġ| package Ġroute guide ; ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| option Ġjava _ package Ġ= Ġ" com . squareup . route guide "; ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| /** ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ* ĠRoute Guide Ġservice Ġinterface . ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ*/ ĊĠĠĠĠĠĠĠĠĠ Ġ| service ĠRoute Guide Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ/** ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ* ĠReturns Ġthe Ġ[ Feature ] Ġfor Ġa Ġ[ Point ]. ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġrpc ĠGet Feature ( Point ) Ġreturns Ġ( Feature ) Ġ{} ĊĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠ Ġ| $ point Message ĊĠĠĠĠĠĠĠĠĠ Ġ| $ feature Message ĊĠĠĠĠĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠĠĠ ĠassertEquals ( listOf ( expected ), Ġrepo Builder . generate Grpc Kotlin (" route guide . Route Guide ", ĊĠĠĠĠĠĠĠ Ġrpc Call Style Ġ= ĠRpc Call Style . BLOCK ING , Ġrpc Role Ġ= ĠRpc Role . SERVER )) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġno Package () Ġ{ ĊĠĠĠ Ġval Ġexpected Interface Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġ| import Ġcom . squareup . wire . Grpc Call ĊĠĠĠĠĠĠĠĠĠ Ġ| import Ġcom . squareup . wire . Service ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| /** ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ* ĠRoute Guide Ġservice Ġinterface . ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ*/ ĊĠĠĠĠĠĠĠĠĠ Ġ| public Ġinterface ĠRoute Guide Client Ġ: ĠService Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ/** ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ* ĠReturns Ġthe Ġ[ Feature ] Ġfor Ġa Ġ[ Point ]. ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġfun ĠGet Feature (): ĠGr pc Call < Point , ĠFeature > ĊĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠ Ġ| """. trim Margin () ĊĠĠĠ Ġval Ġexpected Implementation Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġ| import Ġcom . squareup . wire . Grpc Call ĊĠĠĠĠĠĠĠĠĠ Ġ| import Ġcom . squareup . wire . Grpc Client ĊĠĠĠĠĠĠĠĠĠ Ġ| import Ġcom . squareup . wire . Grpc Method ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| /** ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ* ĠRoute Guide Ġservice Ġinterface . ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ*/ ĊĠĠĠĠĠĠĠĠĠ Ġ| public Ġclass ĠGr pc Route Guide Client ( ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġprivate Ġval Ġclient : ĠGr pc Client ĊĠĠĠĠĠĠĠĠĠ Ġ| ) Ġ: ĠRoute Guide Client Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ/** ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ* ĠReturns Ġthe Ġ[ Feature ] Ġfor Ġa Ġ[ Point ]. ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġoverride Ġfun ĠGet Feature (): ĠGr pc Call < Point , ĠFeature > Ġ= Ġclient . new Call ( Grpc Method ( ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġpath Ġ= Ġ"/ Route Guide / Get Feature ", ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġrequest Adapter Ġ= ĠPoint . ADAPTER , ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġresponse Adapter Ġ= ĠFeature . ADAPTER ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ)) ĊĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠ Ġ| """. trim Margin () ĊĊĠĠĠ Ġval Ġrepo Builder Ġ= ĠRepo Builder () ĊĠĠĠĠĠĠĠ Ġ. add (" route guide . proto ", Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġ| /** ĠRoute Guide Ġservice Ġinterface . Ġ*/ ĊĠĠĠĠĠĠĠĠĠ Ġ| service ĠRoute Guide Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ/** ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ* ĠReturns Ġthe Ġ[ Feature ] Ġfor Ġa Ġ[ Point ]. ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġrpc ĠGet Feature ( Point ) Ġreturns Ġ( Feature ) Ġ{} ĊĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠ Ġ| $ point Message ĊĠĠĠĠĠĠĠĠĠ Ġ| $ feature Message ĊĠĠĠĠĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠĠĠ ĠassertEquals ( listOf ( expected Interface , Ġexpected Implementation ), ĊĠĠĠĠĠĠĠ Ġrepo Builder . generate Grpc Kotlin (" Route Guide ")) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġmulti Depth Package () Ġ{ ĊĠĠĠ Ġval Ġexpected Interface Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġ| package Ġroute guide . grpc ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| import Ġcom . squareup . wire . Grpc Call ĊĠĠĠĠĠĠĠĠĠ Ġ| import Ġcom . squareup . wire . Service ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| /** ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ* ĠRoute Guide Ġservice Ġinterface . ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ*/ ĊĠĠĠĠĠĠĠĠĠ Ġ| public Ġinterface ĠRoute Guide Client Ġ: ĠService Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ/** ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ* ĠReturns Ġthe Ġ[ Feature ] Ġat Ġthe Ġgiven Ġ[ Point ]. ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġfun ĠGet Feature (): ĠGr pc Call < Point , ĠFeature > ĊĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠ Ġ| """. trim Margin () ĊĠĠĠ Ġval Ġexpected Implementation Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġ| package Ġroute guide . grpc ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| import Ġcom . squareup . wire . Grpc Call ĊĠĠĠĠĠĠĠĠĠ Ġ| import Ġcom . squareup . wire . Grpc Client ĊĠĠĠĠĠĠĠĠĠ Ġ| import Ġcom . squareup . wire . Grpc Method ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| /** ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ* ĠRoute Guide Ġservice Ġinterface . ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ*/ ĊĠĠĠĠĠĠĠĠĠ Ġ| public Ġclass ĠGr pc Route Guide Client ( ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġprivate Ġval Ġclient : ĠGr pc Client ĊĠĠĠĠĠĠĠĠĠ Ġ| ) Ġ: ĠRoute Guide Client Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ/** ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ* ĠReturns Ġthe Ġ[ Feature ] Ġat Ġthe Ġgiven Ġ[ Point ]. ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġoverride Ġfun ĠGet Feature (): ĠGr pc Call < Point , ĠFeature > Ġ= Ġclient . new Call ( Grpc Method ( ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġpath Ġ= Ġ"/ route guide . grpc . Route Guide / Get Feature ", ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġrequest Adapter Ġ= ĠPoint . ADAPTER , ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġresponse Adapter Ġ= ĠFeature . ADAPTER ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ)) ĊĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠ Ġ| """. trim Margin () ĊĊĠĠĠ Ġval Ġrepo Builder Ġ= ĠRepo Builder () ĊĠĠĠĠĠĠĠ Ġ. add (" route guide . proto ", Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġ| package Ġroute guide . grpc ; ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| /** ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ* ĠRoute Guide Ġservice Ġinterface . ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ*/ ĊĠĠĠĠĠĠĠĠĠ Ġ| service ĠRoute Guide Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ// ĠReturns Ġthe Ġ[ Feature ] Ġat Ġthe Ġgiven Ġ[ Point ]. ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġrpc ĠGet Feature ( Point ) Ġreturns Ġ( Feature ) Ġ{} ĊĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠ Ġ| $ point Message ĊĠĠĠĠĠĠĠĠĠ Ġ| $ feature Message ĊĠĠĠĠĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠĠĠ ĠassertEquals ( listOf ( expected Interface , Ġexpected Implementation ), ĊĠĠĠĠĠĠĠ Ġrepo Builder . generate Grpc Kotlin (" route guide . grpc . Route Guide ")) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġstreaming Request () Ġ{ ĊĠĠĠ Ġval Ġexpected Interface Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġ| package Ġroute guide ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| import Ġcom . squareup . wire . Grpc Streaming Call ĊĠĠĠĠĠĠĠĠĠ Ġ| import Ġcom . squareup . wire . Service ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| /** ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ* ĠRoute Guide Ġservice Ġinterface . ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ*/ ĊĠĠĠĠĠĠĠĠĠ Ġ| public Ġinterface ĠRoute Guide Client Ġ: ĠService Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ/** ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ* ĠRecords Ġa Ġroute Ġmade Ġup Ġof Ġthe Ġprovided Ġ[ Point ] s . ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġfun ĠRecord Route (): ĠGr pc Streaming Call < Point , ĠRoute Summary > ĊĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠ Ġ| """. trim Margin () ĊĠĠĠ Ġval Ġexpected Implementation Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġ| package Ġroute guide ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| import Ġcom . squareup . wire . Grpc Client ĊĠĠĠĠĠĠĠĠĠ Ġ| import Ġcom . squareup . wire . Grpc Method ĊĠĠĠĠĠĠĠĠĠ Ġ| import Ġcom . squareup . wire . Grpc Streaming Call ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| /** ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ* ĠRoute Guide Ġservice Ġinterface . ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ*/ ĊĠĠĠĠĠĠĠĠĠ Ġ| public Ġclass ĠGr pc Route Guide Client ( ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġprivate Ġval Ġclient : ĠGr pc Client ĊĠĠĠĠĠĠĠĠĠ Ġ| ) Ġ: ĠRoute Guide Client Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ/** ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ* ĠRecords Ġa Ġroute Ġmade Ġup Ġof Ġthe Ġprovided Ġ[ Point ] s . ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġoverride Ġfun ĠRecord Route (): ĠGr pc Streaming Call < Point , ĠRoute Summary > Ġ= ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġclient . new Streaming Call ( Grpc Method ( ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġpath Ġ= Ġ"/ route guide . Route Guide / Record Route ", ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġrequest Adapter Ġ= ĠPoint . ADAPTER , ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġresponse Adapter Ġ= ĠRoute Summary . ADAPTER ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ)) ĊĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠ Ġ| """. trim Margin () ĊĊĠĠĠ Ġval Ġrepo Builder Ġ= ĠRepo Builder () ĊĠĠĠĠĠĠĠ Ġ. add (" route guide . proto ", Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġ| package Ġroute guide ; ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| /** ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ* ĠRoute Guide Ġservice Ġinterface . ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ*/ ĊĠĠĠĠĠĠĠĠĠ Ġ| service ĠRoute Guide Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ/** ĠRecords Ġa Ġroute Ġmade Ġup Ġof Ġthe Ġprovided Ġ[ Point ] s . Ġ*/ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġrpc ĠRecord Route ( stream ĠPoint ) Ġreturns Ġ( Route Summary ) Ġ{} ĊĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠ Ġ| $ point Message ĊĠĠĠĠĠĠĠĠĠ Ġ| $ route Summary Message ĊĠĠĠĠĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠĠĠ ĠassertEquals ( listOf ( expected Interface , Ġexpected Implementation ), ĊĠĠĠĠĠĠĠ Ġrepo Builder . generate Grpc Kotlin (" route guide . Route Guide ")) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġstreaming Response () Ġ{ ĊĠĠĠ Ġval Ġexpected Interface Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġ| package Ġroute guide ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| import Ġcom . squareup . wire . Grpc Streaming Call ĊĠĠĠĠĠĠĠĠĠ Ġ| import Ġcom . squareup . wire . Service ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| /** ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ* ĠRoute Guide Ġservice Ġinterface . ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ*/ ĊĠĠĠĠĠĠĠĠĠ Ġ| public Ġinterface ĠRoute Guide Client Ġ: ĠService Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ/** ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ* ĠList Ġthe Ġfeatures Ġavailable Ġin Ġthe Ġarea Ġdefined Ġby Ġ[ Rectangle ]. ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġfun ĠList Features (): ĠGr pc Streaming Call < Rectangle , ĠFeature > ĊĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠ Ġ| """. trim Margin () ĊĠĠĠ Ġval Ġexpected Implementation Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġ| package Ġroute guide ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| import Ġcom . squareup . wire . Grpc Client ĊĠĠĠĠĠĠĠĠĠ Ġ| import Ġcom . squareup . wire . Grpc Method ĊĠĠĠĠĠĠĠĠĠ Ġ| import Ġcom . squareup . wire . Grpc Streaming Call ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| /** ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ* ĠRoute Guide Ġservice Ġinterface . ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ*/ ĊĠĠĠĠĠĠĠĠĠ Ġ| public Ġclass ĠGr pc Route Guide Client ( ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġprivate Ġval Ġclient : ĠGr pc Client ĊĠĠĠĠĠĠĠĠĠ Ġ| ) Ġ: ĠRoute Guide Client Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ/** ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ* ĠList Ġthe Ġfeatures Ġavailable Ġin Ġthe Ġarea Ġdefined Ġby Ġ[ Rectangle ]. ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġoverride Ġfun ĠList Features (): ĠGr pc Streaming Call < Rectangle , ĠFeature > Ġ= ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġclient . new Streaming Call ( Grpc Method ( ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġpath Ġ= Ġ"/ route guide . Route Guide / List Features ", ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġrequest Adapter Ġ= ĠRectangle . ADAPTER , ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġresponse Adapter Ġ= ĠFeature . ADAPTER ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ)) ĊĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠ Ġ| """. trim Margin () ĊĊĠĠĠ Ġval Ġrepo Builder Ġ= ĠRepo Builder () ĊĠĠĠĠĠĠĠ Ġ. add (" route guide . proto ", Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġ| package Ġroute guide ; ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| /** ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ* ĠRoute Guide Ġservice Ġinterface . ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ*/ ĊĠĠĠĠĠĠĠĠĠ Ġ| service ĠRoute Guide Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ// ĠList Ġthe Ġfeatures Ġavailable Ġin Ġthe Ġarea Ġdefined Ġby Ġ[ Rectangle ]. ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġrpc ĠList Features ( Rectangle ) Ġreturns Ġ( stream ĠFeature ) Ġ{} ĊĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠ Ġ| $ rect ange Message ĊĠĠĠĠĠĠĠĠĠ Ġ| $ point Message ĊĠĠĠĠĠĠĠĠĠ Ġ| $ feature Message ĊĠĠĠĠĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠĠĠ ĠassertEquals ( listOf ( expected Interface , Ġexpected Implementation ), ĊĠĠĠĠĠĠĠ Ġrepo Builder . generate Grpc Kotlin (" route guide . Route Guide ")) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġbid irectional () Ġ{ ĊĠĠĠ Ġ// language = kotlin ĊĠĠĠ Ġval Ġblocking Client Interface Ġ= Ġ""" ĊĠĠĠĠĠĠĠ Ġpackage Ġroute guide ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . wire . Grpc Streaming Call ĊĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . wire . Service ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠRoute Guide Ġservice Ġinterface . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġpublic Ġinterface ĠRoute Guide Client Ġ: ĠService Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠ Ġ* ĠChat Ġwith Ġsomeone Ġusing Ġa Ġ[ Route Note ]. ĊĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠ Ġpublic Ġfun ĠRoute Chat (): ĠGr pc Streaming Call < Route Note , ĠRoute Note > ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠ Ġ// language = kotlin ĊĠĠĠ Ġval Ġblocking Client Implementation Ġ= Ġ""" ĊĠĠĠĠĠĠĠ Ġpackage Ġroute guide ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . wire . Grpc Client ĊĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . wire . Grpc Method ĊĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . wire . Grpc Streaming Call ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠRoute Guide Ġservice Ġinterface . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġpublic Ġclass ĠGr pc Route Guide Client ( ĊĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġclient : ĠGr pc Client ĊĠĠĠĠĠĠĠ Ġ) Ġ: ĠRoute Guide Client Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠ Ġ* ĠChat Ġwith Ġsomeone Ġusing Ġa Ġ[ Route Note ]. ĊĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġfun ĠRoute Chat (): ĠGr pc Streaming Call < Route Note , ĠRoute Note > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient . new Streaming Call ( Grpc Method ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath Ġ= Ġ"/ route guide . Route Guide / Route Chat ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Adapter Ġ= ĠRoute Note . ADAPTER , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Adapter Ġ= ĠRoute Note . ADAPTER ĊĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠ Ġ// language = kotlin ĊĠĠĠ Ġval Ġblocking Server Ġ= Ġ""" ĊĠĠĠĠĠĠĠ Ġpackage Ġroute guide ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . wire . Message Sink ĊĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . wire . Message Source ĊĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . wire . Service ĊĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . wire . Wire Rpc ĊĠĠĠĠĠĠĠ Ġimport Ġkotlin . Unit ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠRoute Guide Ġservice Ġinterface . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġpublic Ġinterface ĠRoute Guide Blocking Server Ġ: ĠService Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠ Ġ* ĠChat Ġwith Ġsomeone Ġusing Ġa Ġ[ Route Note ]. ĊĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠ Ġ@ Wire Rpc ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath Ġ= Ġ"/ route guide . Route Guide / Route Chat ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Adapter Ġ= Ġ" route guide . Route Note # ADAPTER ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Adapter Ġ= Ġ" route guide . Route Note # ADAPTER " ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġpublic Ġfun ĠRoute Chat ( request : ĠMessage Source < Route Note >, Ġresponse : ĠMessage Sink < Route Note >): ĠUnit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠ Ġ// language = kotlin ĊĠĠĠ Ġval Ġsus pending Client Interface Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠ Ġpackage Ġroute guide ĊĠĠĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . wire . Grpc Streaming Call ĊĠĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . wire . Service ĊĠĠĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠ Ġ* ĠRoute Guide Ġservice Ġinterface . ĊĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠ Ġpublic Ġinterface ĠRoute Guide Client Ġ: ĠService Ġ{ ĊĠĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠChat Ġwith Ġsomeone Ġusing Ġa Ġ[ Route Note ]. ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġfun ĠRoute Chat (): ĠGr pc Streaming Call < Route Note , ĠRoute Note > ĊĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠ Ġ// language = kotlin ĊĠĠĠ Ġval Ġsus pending Client Implementation Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠ Ġpackage Ġroute guide ĊĠĠĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . wire . Grpc Client ĊĠĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . wire . Grpc Method ĊĠĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . wire . Grpc Streaming Call ĊĠĠĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠ Ġ* ĠRoute Guide Ġservice Ġinterface . ĊĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠ Ġpublic Ġclass ĠGr pc Route Guide Client ( ĊĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġclient : ĠGr pc Client ĊĠĠĠĠĠĠĠĠ Ġ) Ġ: ĠRoute Guide Client Ġ{ ĊĠĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠChat Ġwith Ġsomeone Ġusing Ġa Ġ[ Route Note ]. ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġfun ĠRoute Chat (): ĠGr pc Streaming Call < Route Note , ĠRoute Note > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient . new Streaming Call ( Grpc Method ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath Ġ= Ġ"/ route guide . Route Guide / Route Chat ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Adapter Ġ= ĠRoute Note . ADAPTER , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Adapter Ġ= ĠRoute Note . ADAPTER ĊĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠ Ġ// language = kotlin ĊĠĠĠ Ġval Ġsus pending Server Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠ Ġpackage Ġroute guide ĊĠĠĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . wire . Service ĊĠĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . wire . Wire Rpc ĊĠĠĠĠĠĠĠĠ Ġimport Ġkotlin . Unit ĊĠĠĠĠĠĠĠĠ Ġimport Ġkotlinx . coroutines . channels . Receive Channel ĊĠĠĠĠĠĠĠĠ Ġimport Ġkotlinx . coroutines . channels . Send Channel ĊĠĠĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠ Ġ* ĠRoute Guide Ġservice Ġinterface . ĊĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠ Ġpublic Ġinterface ĠRoute Guide Server Ġ: ĠService Ġ{ ĊĠĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠChat Ġwith Ġsomeone Ġusing Ġa Ġ[ Route Note ]. ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠ Ġ@ Wire Rpc ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath Ġ= Ġ"/ route guide . Route Guide / Route Chat ", ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Adapter Ġ= Ġ" route guide . Route Note # ADAPTER ", ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Adapter Ġ= Ġ" route guide . Route Note # ADAPTER " ĊĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġsuspend Ġfun ĠRoute Chat ( request : ĠSend Channel < Route Note >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse : ĠReceive Channel < Route Note >): ĠUnit ĊĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠ Ġval Ġrepo Builder Ġ= ĠRepo Builder () ĊĠĠĠĠĠĠĠ Ġ. add (" route guide . proto ", Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġ| package Ġroute guide ; ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| /** ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ* ĠRoute Guide Ġservice Ġinterface . ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ*/ ĊĠĠĠĠĠĠĠĠĠ Ġ| service ĠRoute Guide Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ// ĠChat Ġwith Ġsomeone Ġusing Ġa Ġ[ Route Note ]. ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġrpc ĠRoute Chat ( stream ĠRoute Note ) Ġreturns Ġ( stream ĠRoute Note ) Ġ{} ĊĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠ Ġ| $ point Message ĊĠĠĠĠĠĠĠĠĠ Ġ| $ route Note Message ĊĠĠĠĠĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĊĠĠĠ ĠassertEquals ( listOf ( blocking Client Interface , Ġblocking Client Implementation ), ĊĠĠĠĠĠĠĠ Ġrepo Builder . generate Grpc Kotlin (" route guide . Route Guide ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrpc Call Style Ġ= ĠRpc Call Style . BLOCK ING , Ġrpc Role Ġ= ĠRpc Role . CLIENT )) ĊĠĠĠ ĠassertEquals ( listOf ( blocking Server ), Ġrepo Builder . generate Grpc Kotlin (" route guide . Route Guide ", ĊĠĠĠĠĠĠĠ Ġrpc Call Style Ġ= ĠRpc Call Style . BLOCK ING , Ġrpc Role Ġ= ĠRpc Role . SERVER )) ĊĠĠĠ ĠassertEquals ( listOf ( sus pending Client Interface , Ġsus pending Client Implementation ), ĊĠĠĠĠĠĠĠ Ġrepo Builder . generate Grpc Kotlin (" route guide . Route Guide ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrpc Call Style Ġ= ĠRpc Call Style . SUS PENDING , Ġrpc Role Ġ= ĠRpc Role . CLIENT )) ĊĠĠĠ ĠassertEquals ( listOf ( sus pending Server ), Ġrepo Builder . generate Grpc Kotlin (" route guide . Route Guide ", ĊĠĠĠĠĠĠĠ Ġrpc Call Style Ġ= ĠRpc Call Style . SUS PENDING , Ġrpc Role Ġ= ĠRpc Role . SERVER )) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġmultiple Rp cs () Ġ{ ĊĠĠĠ Ġval Ġexpected Interface Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġ| package Ġroute guide ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| import Ġcom . squareup . wire . Grpc Call ĊĠĠĠĠĠĠĠĠĠ Ġ| import Ġcom . squareup . wire . Grpc Streaming Call ĊĠĠĠĠĠĠĠĠĠ Ġ| import Ġcom . squareup . wire . Service ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| /** ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ* ĠRoute Guide Ġservice Ġinterface . ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ*/ ĊĠĠĠĠĠĠĠĠĠ Ġ| public Ġinterface ĠRoute Guide Client Ġ: ĠService Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ/** ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ* ĠReturns Ġthe Ġ[ Feature ] Ġfor Ġa Ġ[ Point ]. ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġfun ĠGet Feature (): ĠGr pc Call < Point , ĠFeature > ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ/** ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ* ĠChat Ġwith Ġsomeone Ġusing Ġa Ġ[ Route Note ]. ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġfun ĠRoute Chat (): ĠGr pc Streaming Call < Route Note , ĠRoute Note > ĊĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠ Ġ| """. trim Margin () ĊĠĠĠ Ġval Ġexpected Implementation Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġ| package Ġroute guide ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| import Ġcom . squareup . wire . Grpc Call ĊĠĠĠĠĠĠĠĠĠ Ġ| import Ġcom . squareup . wire . Grpc Client ĊĠĠĠĠĠĠĠĠĠ Ġ| import Ġcom . squareup . wire . Grpc Method ĊĠĠĠĠĠĠĠĠĠ Ġ| import Ġcom . squareup . wire . Grpc Streaming Call ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| /** ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ* ĠRoute Guide Ġservice Ġinterface . ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ*/ ĊĠĠĠĠĠĠĠĠĠ Ġ| public Ġclass ĠGr pc Route Guide Client ( ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġprivate Ġval Ġclient : ĠGr pc Client ĊĠĠĠĠĠĠĠĠĠ Ġ| ) Ġ: ĠRoute Guide Client Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ/** ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ* ĠReturns Ġthe Ġ[ Feature ] Ġfor Ġa Ġ[ Point ]. ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġoverride Ġfun ĠGet Feature (): ĠGr pc Call < Point , ĠFeature > Ġ= Ġclient . new Call ( Grpc Method ( ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġpath Ġ= Ġ"/ route guide . Route Guide / Get Feature ", ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġrequest Adapter Ġ= ĠPoint . ADAPTER , ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġresponse Adapter Ġ= ĠFeature . ADAPTER ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ)) ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ/** ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ* ĠChat Ġwith Ġsomeone Ġusing Ġa Ġ[ Route Note ]. ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġoverride Ġfun ĠRoute Chat (): ĠGr pc Streaming Call < Route Note , ĠRoute Note > Ġ= ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġclient . new Streaming Call ( Grpc Method ( ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġpath Ġ= Ġ"/ route guide . Route Guide / Route Chat ", ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġrequest Adapter Ġ= ĠRoute Note . ADAPTER , ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġresponse Adapter Ġ= ĠRoute Note . ADAPTER ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ)) ĊĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠ Ġ| """. trim Margin () ĊĊĠĠĠ Ġval Ġrepo Builder Ġ= ĠRepo Builder () ĊĠĠĠĠĠĠĠ Ġ. add (" route guide . proto ", Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġ| package Ġroute guide ; ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| /** ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ* ĠRoute Guide Ġservice Ġinterface . ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ*/ ĊĠĠĠĠĠĠĠĠĠ Ġ| service ĠRoute Guide Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ// ĠReturns Ġthe Ġ[ Feature ] Ġfor Ġa Ġ[ Point ]. ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġrpc ĠGet Feature ( Point ) Ġreturns Ġ( Feature ) Ġ{} ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ// ĠChat Ġwith Ġsomeone Ġusing Ġa Ġ[ Route Note ]. ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġrpc ĠRoute Chat ( stream ĠRoute Note ) Ġreturns Ġ( stream ĠRoute Note ) Ġ{} ĊĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠ Ġ| $ point Message ĊĠĠĠĠĠĠĠĠĠ Ġ| $ feature Message ĊĠĠĠĠĠĠĠĠĠ Ġ| $ route Note Message ĊĠĠĠĠĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠĠĠ ĠassertEquals ( listOf ( expected Interface , Ġexpected Implementation ), ĊĠĠĠĠĠĠĠ Ġrepo Builder . generate Grpc Kotlin (" route guide . Route Guide ")) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġmultiple Rp cs As Single Method Interface () Ġ{ ĊĠĠĠ Ġval Ġrepo Builder Ġ= ĠRepo Builder () ĊĠĠĠĠĠĠĠ Ġ. add (" route guide . proto ", Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġ| package Ġroute guide ; ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| service ĠRoute Guide Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġrpc ĠGet Feature ( Point ) Ġreturns Ġ( Feature ) Ġ{} ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġrpc ĠRoute Chat ( stream ĠRoute Note ) Ġreturns Ġ( stream ĠRoute Note ) Ġ{} ĊĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠ Ġ| $ point Message ĊĠĠĠĠĠĠĠĠĠ Ġ| $ feature Message ĊĠĠĠĠĠĠĠĠĠ Ġ| $ route Note Message ĊĠĠĠĠĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĊĠĠĠ Ġval Ġexpected Get Feature Interface Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġ| package Ġroute guide ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| import Ġcom . squareup . wire . Grpc Call ĊĠĠĠĠĠĠĠĠĠ Ġ| import Ġcom . squareup . wire . Service ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| public Ġinterface ĠRoute Guide Get Feature Client Ġ: ĠService Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġfun ĠGet Feature (): ĠGr pc Call < Point , ĠFeature > ĊĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠ Ġ| """. trim Margin () ĊĠĠĠ Ġval Ġexpected Get Feature Implementation Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġ| package Ġroute guide ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| import Ġcom . squareup . wire . Grpc Call ĊĠĠĠĠĠĠĠĠĠ Ġ| import Ġcom . squareup . wire . Grpc Client ĊĠĠĠĠĠĠĠĠĠ Ġ| import Ġcom . squareup . wire . Grpc Method ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| public Ġclass ĠGr pc Route Guide Get Feature Client ( ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġprivate Ġval Ġclient : ĠGr pc Client ĊĠĠĠĠĠĠĠĠĠ Ġ| ) Ġ: ĠRoute Guide Get Feature Client Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġoverride Ġfun ĠGet Feature (): ĠGr pc Call < Point , ĠFeature > Ġ= Ġclient . new Call ( Grpc Method ( ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġpath Ġ= Ġ"/ route guide . Route Guide / Get Feature ", ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġrequest Adapter Ġ= ĠPoint . ADAPTER , ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġresponse Adapter Ġ= ĠFeature . ADAPTER ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ)) ĊĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠ Ġ| """. trim Margin () ĊĊĠĠĠ ĠassertEquals ( listOf ( expected Get Feature Interface , Ġexpected Get Feature Implementation ), ĊĠĠĠĠĠĠĠ Ġrepo Builder . generate Grpc Kotlin (" route guide . Route Guide ", Ġ" Get Feature ")) ĊĊĠĠĠ Ġval Ġexpected Route Chat Interface Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġ| package Ġroute guide ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| import Ġcom . squareup . wire . Grpc Streaming Call ĊĠĠĠĠĠĠĠĠĠ Ġ| import Ġcom . squareup . wire . Service ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| public Ġinterface ĠRoute Guide Route Chat Client Ġ: ĠService Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġfun ĠRoute Chat (): ĠGr pc Streaming Call < Route Note , ĠRoute Note > ĊĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠ Ġ| """. trim Margin () ĊĠĠĠ Ġval Ġexpected Route Chat Implementation Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġ| package Ġroute guide ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| import Ġcom . squareup . wire . Grpc Client ĊĠĠĠĠĠĠĠĠĠ Ġ| import Ġcom . squareup . wire . Grpc Method ĊĠĠĠĠĠĠĠĠĠ Ġ| import Ġcom . squareup . wire . Grpc Streaming Call ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| public Ġclass ĠGr pc Route Guide Route Chat Client ( ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġprivate Ġval Ġclient : ĠGr pc Client ĊĠĠĠĠĠĠĠĠĠ Ġ| ) Ġ: ĠRoute Guide Route Chat Client Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġoverride Ġfun ĠRoute Chat (): ĠGr pc Streaming Call < Route Note , ĠRoute Note > Ġ= ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġclient . new Streaming Call ( Grpc Method ( ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġpath Ġ= Ġ"/ route guide . Route Guide / Route Chat ", ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġrequest Adapter Ġ= ĠRoute Note . ADAPTER , ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġresponse Adapter Ġ= ĠRoute Note . ADAPTER ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ)) ĊĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠ Ġ| """. trim Margin () ĊĊĠĠĠ ĠassertEquals ( listOf ( expected Route Chat Interface , Ġexpected Route Chat Implementation ), ĊĠĠĠĠĠĠĠ Ġrepo Builder . generate Grpc Kotlin (" route guide . Route Guide ", Ġ" Route Chat ")) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġname Allocator Is Used In Decode For Reader Tag () Ġ{ ĊĠĠĠ Ġval Ġrepo Builder Ġ= ĠRepo Builder () ĊĠĠĠĠĠĠĠ Ġ. add (" message . proto ", Ġ""" ĊĠĠĠĠĠĠĠ Ġ| message ĠMessage Ġ{ ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġrequired Ġfloat Ġtag Ġ= Ġ 1 ; ĊĠĠĠĠĠĠĠ Ġ| } """. trim Margin ()) ĊĠĠĠ Ġval Ġcode Ġ= Ġrepo Builder . generate Kotlin (" Message ") ĊĠĠĠ ĠassertTrue ( code . contains (" val ĠunknownFields Ġ= Ġreader . forEach Tag Ġ{ Ġtag _ Ġ-> ")) ĊĠĠĠ ĠassertTrue ( code . contains (" when Ġ( tag _) ")) ĊĠĠĠ ĠassertTrue ( code . contains (" 1 Ġ-> Ġtag Ġ= ĠProto Adapter . FLOAT . decode ( reader ) ")) ĊĠĠĠ ĠassertTrue ( code . contains (" else Ġ-> Ġreader . read Unknown Field ( tag _) ")) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġsome FieldName Is Keyword () Ġ{ ĊĠĠĠ Ġval Ġrepo Builder Ġ= ĠRepo Builder () ĊĠĠĠĠĠĠĠ Ġ. add (" message . proto ", Ġ""" ĊĠĠĠĠĠĠĠ Ġ| message ĠMessage Ġ{ ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġrequired Ġfloat Ġvar Ġ Ġ= Ġ 1 ; ĊĠĠĠĠĠĠĠ Ġ| } """. trim Margin ()) ĊĠĠĠ Ġval Ġcode Ġ= Ġrepo Builder . generate Kotlin (" Message ") ĊĠĠĠ ĠassertTrue ( code . contains (" throw Ġmissing Required Fields ( var _, Ġ\" var \") ")) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġgenerate Type Uses PackageName On Field And ClassName Cl ash () Ġ{ ĊĠĠĠ Ġval Ġrepo Builder Ġ= ĠRepo Builder () ĊĠĠĠĠĠĠĠ Ġ. add (" person . proto ", Ġ""" ĊĠĠĠĠĠĠĠ Ġ| package Ġcommon . proto ; ĊĠĠĠĠĠĠĠ Ġ| enum ĠGender Ġ{ ĊĠĠĠĠĠĠĠ Ġ| Ġ ĠGender _ Male Ġ= Ġ 0 ; ĊĠĠĠĠĠĠĠ Ġ| Ġ ĠGender _ Female Ġ= Ġ 1 ; ĊĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ| message ĠPerson Ġ{ ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġoptional ĠGender ĠGender Ġ= Ġ 1 ; ĊĠĠĠĠĠĠĠ Ġ| } """. trim Margin ()) ĊĠĠĠ Ġval Ġcode Ġ= Ġrepo Builder . generate Kotlin (" common . proto . Person ") ĊĠĠĠ ĠassertTrue ( code . contains (" val Ġcommon _ proto _ Gender : ĠGender ")) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġgenerate Type Uses PackageName On Field And ClassName Cl ash Within Package () Ġ{ ĊĠĠĠ Ġval Ġrepo Builder Ġ= ĠRepo Builder () ĊĠĠĠĠĠĠĠ Ġ. add (" a . proto ", Ġ""" ĊĠĠĠĠĠĠĠ Ġ| package Ġcommon . proto ; ĊĠĠĠĠĠĠĠ Ġ| enum ĠStatus Ġ{ ĊĠĠĠĠĠĠĠ Ġ| Ġ ĠStatus _ Approved Ġ= Ġ 0 ; ĊĠĠĠĠĠĠĠ Ġ| Ġ ĠStatus _ Denied Ġ= Ġ 1 ; ĊĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ| enum ĠAnother Status Ġ{ ĊĠĠĠĠĠĠĠ Ġ| Ġ ĠAnother Status _ Processing Ġ= Ġ 0 ; ĊĠĠĠĠĠĠĠ Ġ| Ġ ĠAnother Status _ Completed Ġ= Ġ 1 ; ĊĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ| message ĠA Ġ{ ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġmessage ĠB Ġ{ ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġoptional ĠStatus ĠStatus Ġ= Ġ 1 ; ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ} ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġrepeated ĠB Ġb Ġ= Ġ 1 ; ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġoptional ĠAnother Status ĠStatus Ġ= Ġ 2 ; ĊĠĠĠĠĠĠĠ Ġ| } """. trim Margin ()) ĊĠĠĠ Ġval Ġcode Ġ= Ġrepo Builder . generate Kotlin (" common . proto . A ") ĊĠĠĠ ĠassertTrue ( code . contains (" val Ġcommon _ proto _ Status : ĠAnother Status ")) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġuses Any () Ġ{ ĊĠĠĠ Ġval Ġrepo Builder Ġ= ĠRepo Builder () ĊĠĠĠĠĠĠĠ Ġ. add (" a . proto ", Ġ""" ĊĠĠĠĠĠĠĠ Ġ| package Ġcommon . proto ; ĊĠĠĠĠĠĠĠ Ġ| import Ġ" google / protobuf / any . proto "; ĊĠĠĠĠĠĠĠ Ġ| message ĠMessage Ġ{ ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġoptional Ġgoogle . protobuf . Any Ġjust _ one Ġ= Ġ 1 ; ĊĠĠĠĠĠĠĠ Ġ| } """. trim Margin ()) ĊĠĠĠ Ġval Ġcode Ġ= Ġrepo Builder . generate Kotlin (" common . proto . Message ") ĊĠĠĠ ĠassertTrue ( code . contains (" import Ġcom . squareup . wire . Any Message ")) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġwild Comments Are Esc aped () Ġ{ ĊĠĠĠ Ġval Ġrepo Builder Ġ= ĠRepo Builder () ĊĠĠĠĠĠĠĠ Ġ. add (" message . proto ", Ġ""" ĊĠĠĠĠĠĠĠ Ġ| message ĠPerson Ġ{ ĊĠĠĠĠĠĠĠ Ġ| ĉ required Ġstring Ġname Ġ= Ġ 1 ; ĊĠĠĠĠĠĠĠ Ġ| ĉ required Ġint 3 2 Ġid Ġ= Ġ 2 ; ĊĠĠĠĠĠĠĠ Ġ| ĉ optional Ġstring Ġemail Ġ= Ġ 3 ; ĊĠĠĠĠĠĠĠ Ġ| ĉ enum ĠPhone Type Ġ{ ĊĠĠĠĠĠĠĠ Ġ| ĉ ĉ HOME Ġ= Ġ 0 ; ĊĠĠĠĠĠĠĠ Ġ| ĉ ĉ WORK Ġ= Ġ 1 ; ĊĠĠĠĠĠĠĠ Ġ| ĉ ĉ MOB ILE Ġ= Ġ 2 ; ĊĠĠĠĠĠĠĠ Ġ| ĉ } ĊĠĠĠĠĠĠĠ Ġ| ĉ message ĠPhone Number Ġ{ ĊĠĠĠĠĠĠĠ Ġ| ĉ ĉ required Ġstring Ġnumber Ġ= Ġ 1 ; ĊĠĠĠĠĠĠĠ Ġ| ĉ ĉ optional ĠPhone Type Ġtype Ġ= Ġ 2 Ġ[ default Ġ= ĠHOME ]; ĊĠĠĠĠĠĠĠ Ġ| ĉ } ĊĠĠĠĠĠĠĠ Ġ| ĉ repeated ĠPhone Number Ġphone Ġ= Ġ 4 ; ĊĠĠĠĠĠĠĠ Ġ| } """. trim Margin ()) ĊĠĠĠ Ġval Ġcode Ġ= Ġrepo Builder . generate Kotlin (" Person "). replace ("\ n ", Ġ"") ĊĠĠĠ ĠassertTrue ( code . contains (" class ĠPerson ")) ĊĠĠĠ ĠassertTrue ( code . contains (" object Ġ: ĠProto Adapter < PhoneNumber >(" )) ĊĠĠĠ ĠassertTrue ( code . contains (" Field Encoding . LENGTH _ DE LIMIT ED ")) ĊĠĠĠ ĠassertTrue ( code . contains (" PhoneNumber :: class ")) ĊĠĠĠ ĠassertTrue ( code . contains (" override Ġfun Ġencode ( writer : ĠProto Writer , Ġvalue : ĠPerson ) ")) ĊĠĠĠ ĠassertTrue ( code . contains (" enum Ġclass ĠPhone Type ( ĠĠĠ Ġpublic Ġoverride Ġval Ġvalue : ĠInt Ġ Ġ) Ġ: ĠWire Enum ")) ĊĠĠĠ ĠassertTrue ( code . contains (" fun Ġfrom Value ( value : ĠInt ): ĠPhone Type ? ")) ĊĠĠĠ ĠassertTrue ( code . contains (" WORK ( 1 ), ")) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġsanitize String On Print ing () Ġ{ ĊĠĠĠ Ġval Ġrepo Builder Ġ= ĠRepo Builder () ĊĠĠĠĠĠĠĠ Ġ. add (" message . proto ", Ġ""" ĊĠĠĠĠĠĠĠ Ġ| message ĠPerson Ġ{ ĊĠĠĠĠĠĠĠ Ġ| ĉ required Ġstring Ġname Ġ= Ġ 1 ; ĊĠĠĠĠĠĠĠ Ġ| ĉ required Ġint 3 2 Ġid Ġ= Ġ 2 ; ĊĠĠĠĠĠĠĠ Ġ| ĉ repeated ĠPhone Number Ġphone Ġ= Ġ 3 ; ĊĠĠĠĠĠĠĠ Ġ| ĉ repeated Ġstring Ġaliases Ġ= Ġ 4 ; ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| ĉ message ĠPhone Number Ġ{ ĊĠĠĠĠĠĠĠ Ġ| ĉ ĉ required Ġstring Ġnumber Ġ= Ġ 1 ; ĊĠĠĠĠĠĠĠ Ġ| ĉ ĉ optional ĠPhone Type Ġtype Ġ= Ġ 2 Ġ[ default Ġ= ĠHOME ]; ĊĠĠĠĠĠĠĠ Ġ| ĉ } ĊĠĠĠĠĠĠĠ Ġ| ĉ enum ĠPhone Type Ġ{ ĊĠĠĠĠĠĠĠ Ġ| ĉ ĉ HOME Ġ= Ġ 0 ; ĊĠĠĠĠĠĠĠ Ġ| ĉ ĉ WORK Ġ= Ġ 1 ; ĊĠĠĠĠĠĠĠ Ġ| ĉ ĉ MOB ILE Ġ= Ġ 2 ; ĊĠĠĠĠĠĠĠ Ġ| ĉ } ĊĠĠĠĠĠĠĠ Ġ| } """. trim Margin ()) ĊĠĠĠ Ġval Ġcode Ġ= Ġrepo Builder . generate Kotlin (" Person ") ĊĠĠĠ ĠassertTrue ( code . contains (" import Ġcom . squareup . wire .` internal `. sanitize ")) ĊĠĠĠ ĠassertTrue ( code . contains (" result Ġ+= Ġ\" \" \" name =\ ${ sanitize ( name )} \" \"\ "" )) ĊĠĠĠ ĠassertTrue ( code . contains (" result Ġ+= Ġ\" \" \" id =\ $ id \" \"\ "" )) ĊĠĠĠ ĠassertTrue ( code . contains (" result Ġ+= Ġ\" \" \" phone =\ $ phone \" \"\ "" )) ĊĠĠĠ ĠassertTrue ( code . contains (" result Ġ+= Ġ\" \" \" aliases =\ ${ sanitize ( aliases )} \" \"\ "" )) ĊĠĠĠ ĠassertTrue ( code . contains (" result Ġ+= Ġ\" \" \" number =\ ${ sanitize ( number )} \" \"\ "" )) ĊĠĠĠ ĠassertTrue ( code . contains (" result Ġ+= Ġ\" \" \" type =\ $ type \" \"\ "" )) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġsanitize Javadoc Stri ps Trailing Whitespace () Ġ{ ĊĠĠĠ Ġval Ġinput Ġ= Ġ" The Ġquick Ġbrown Ġf ox Ġ Ġ\ n Jump s Ġover Ġ Ġ\ n \ t Ġ\ t \ n The Ġlazy Ġdog Ġ Ġ" ĊĠĠĠ Ġval Ġexpected Ġ= Ġ" The Ġquick Ġbrown Ġf ox \ n Jump s Ġover \ n \ n The Ġlazy Ġdog " ĊĠĠĠ ĠassertEquals ( expected , Ġinput . sanitize K doc ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġsanitize Javadoc Star Slash () Ġ{ ĊĠĠĠ Ġval Ġinput Ġ= Ġ" /* Ġcomment Ġinside Ġcomment . Ġ*/ " ĊĠĠĠ Ġval Ġexpected Ġ= Ġ"/ &# 4 2 ; Ġcomment Ġinside Ġcomment . Ġ&# 4 2 ; /" ĊĠĠĠ ĠassertEquals ( expected , Ġinput . sanitize K doc ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġhandle Long Identifiers () Ġ{ ĊĠĠĠ Ġval Ġlong Type Ġ= Ġ" Message WithName Long er Than 1 0 0 Chars 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 " ĊĠĠĠ Ġval Ġlong Member Ġ= Ġ" member _ with _ name _ which _ is _ long er _ then _ 1 0 0 _ chars _ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 " ĊĠĠĠ Ġval Ġrepo Builder Ġ= ĠRepo Builder () ĊĠĠĠĠĠĠĠ Ġ. add ("$ long Type . proto ", Ġ""" ĊĠĠĠĠĠĠĠ Ġ| message Ġ$ long Type Ġ{ ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġrequired Ġstring Ġ$ long Member Ġ= Ġ 1 ; ĊĠĠĠĠĠĠĠ Ġ| } """. trim Margin ()) ĊĠĠĠ Ġval Ġcode Ġ= Ġrepo Builder . generate Kotlin ( long Type ) ĊĠĠĠ Ġval Ġexpected Equals Condition Implementation Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ($ long Member ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ!= ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġother .$ long Member ) ĊĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĊĠĠĠ ĠassertTrue ( code . contains (" return Ġfalse ")) ĊĠĠĠ ĠassertTrue ( code . contains (" return Ġ$ long Type (" )) ĊĠĠĠ ĠassertTrue ( code . contains ( expected Equals Condition Implementation )) ĊĠĠĠ ĠassertTrue ( code . contains ("$ long Member Ġ= \ n ")) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġconstructor For Proto 3 () Ġ{ ĊĠĠĠ Ġval Ġrepo Builder Ġ= ĠRepo Builder () ĊĠĠĠĠĠĠĠ Ġ. add (" label . proto ", Ġ""" ĊĠĠĠĠĠĠĠ Ġ| syntax Ġ= Ġ" proto 3 "; ĊĠĠĠĠĠĠĠ Ġ| package Ġcommon . proto ; ĊĠĠĠĠĠĠĠ Ġ| message ĠLabel Message Ġ{ ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġstring Ġtext Ġ= Ġ 1 ; ĊĠĠĠĠĠĠĠ Ġ| Ġ ĠAuthor Ġauthor Ġ= Ġ 2 ; ĊĠĠĠĠĠĠĠ Ġ| Ġ ĠEnum Ġenum Ġ= Ġ 3 ; ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġone of Ġchoice Ġ{ ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġint 3 2 Ġfoo Ġ= Ġ 4 ; ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġstring Ġbar Ġ= Ġ 5 ; ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ ĠB az Ġbaz Ġ= Ġ 6 ; ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ} ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġint 6 4 Ġcount Ġ= Ġ 7 ; ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġenum ĠEnum Ġ{ ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ ĠUNKNOWN Ġ= Ġ 0 ; ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ ĠA Ġ= Ġ 1 ; ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ} ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġmessage ĠAuthor Ġ{ ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġstring Ġname Ġ= Ġ 1 ; ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ} ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġmessage ĠB az Ġ{} ĊĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠĠĠ Ġval Ġcode Ġ= Ġrepo Builder . generate Kotlin (" common . proto . Label Message ") ĊĠĠĠ ĠassertTrue ( code . contains (""" val Ġtext : ĠString Ġ= Ġ"", "" ")) ĊĠĠĠ ĠassertTrue ( code . contains (""" val Ġauthor : ĠAuthor ? Ġ= Ġnull , "" ")) ĊĠĠĠ ĠassertTrue ( code . contains (""" val Ġenum _: ĠEnum Ġ= ĠEnum . UNKNOWN , "" ")) ĊĠĠĠ ĠassertTrue ( code . contains (""" val Ġfoo : ĠInt ? Ġ= Ġnull , "" ")) ĊĠĠĠ ĠassertTrue ( code . contains (""" val Ġbar : ĠString ? Ġ= Ġnull , "" ")) ĊĠĠĠ ĠassertTrue ( code . contains (""" val Ġbaz : ĠB az ? Ġ= Ġnull , "" ")) ĊĠĠĠ ĠassertTrue ( code . contains (""" val Ġcount : ĠLong Ġ= Ġ 0 "" ")) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġwire Package T akes Pre cedence Over Java Package () Ġ{ ĊĠĠĠ Ġval Ġrepo Builder Ġ= ĠRepo Builder () ĊĠĠĠĠĠĠĠ Ġ. add (" proto _ package / person . proto ", Ġ""" ĊĠĠĠĠĠĠĠ Ġ| package Ġproto _ package ; ĊĠĠĠĠĠĠĠ Ġ| import Ġ" wire / extensions . proto "; ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| option Ġjava _ package Ġ= Ġ" java _ package "; ĊĠĠĠĠĠĠĠ Ġ| option Ġ( wire . wire _ package ) Ġ= Ġ" wire _ package "; ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| message ĠPerson Ġ{ ĊĠĠĠĠĠĠĠ Ġ| ĉ required Ġstring Ġname Ġ= Ġ 1 ; ĊĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠĠĠ Ġval Ġcode Ġ= Ġrepo Builder . generate Kotlin (" proto _ package . Person ") ĊĠĠĠ ĠassertTrue ( code . contains (" package Ġwire _ package ")) ĊĠĠĠ ĠassertTrue ( code . contains (" class ĠPerson ")) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġwire Package T akes Pre cedence Over Proto Package () Ġ{ ĊĠĠĠ Ġval Ġrepo Builder Ġ= ĠRepo Builder () ĊĠĠĠĠĠĠĠ Ġ. add (" proto _ package / person . proto ", Ġ""" ĊĠĠĠĠĠĠĠ Ġ| package Ġproto _ package ; ĊĠĠĠĠĠĠĠ Ġ| import Ġ" wire / extensions . proto "; ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| option Ġ( wire . wire _ package ) Ġ= Ġ" wire _ package "; ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| message ĠPerson Ġ{ ĊĠĠĠĠĠĠĠ Ġ| ĉ required Ġstring Ġname Ġ= Ġ 1 ; ĊĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠĠĠ Ġval Ġcode Ġ= Ġrepo Builder . generate Kotlin (" proto _ package . Person ") ĊĠĠĠ ĠassertTrue ( code . contains (" package Ġwire _ package ")) ĊĠĠĠ ĠassertTrue ( code . contains (" class ĠPerson ")) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġwire Package Used In Import () Ġ{ ĊĠĠĠ Ġval Ġrepo Builder Ġ= ĠRepo Builder () ĊĠĠĠĠĠĠĠ Ġ. add (" proto _ package / person . proto ", Ġ""" ĊĠĠĠĠĠĠĠ Ġ| package Ġproto _ package ; ĊĠĠĠĠĠĠĠ Ġ| import Ġ" wire / extensions . proto "; ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| option Ġ( wire . wire _ package ) Ġ= Ġ" wire _ package "; ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| message ĠPerson Ġ{ ĊĠĠĠĠĠĠĠ Ġ| ĉ required Ġstring Ġname Ġ= Ġ 1 ; ĊĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠĠĠĠĠĠĠ Ġ. add (" city _ package / home . proto ", Ġ""" ĊĠĠĠĠĠĠĠ Ġ| package Ġcity _ package ; ĊĠĠĠĠĠĠĠ Ġ| import Ġ" proto _ package / person . proto "; ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| message ĠHome Ġ{ ĊĠĠĠĠĠĠĠ Ġ| ĉ repeated Ġproto _ package . Person Ġperson Ġ= Ġ 1 ; ĊĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠĠĠ Ġval Ġcode Ġ= Ġrepo Builder . generate Kotlin (" city _ package . Home ") ĊĠĠĠ ĠassertTrue ( code . contains (" package Ġcity _ package ")) ĊĠĠĠ ĠassertTrue ( code . contains (" import Ġwire _ package . Person ")) ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġval Ġpoint Message Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġ| message ĠPoint Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġoptional Ġint 3 2 Ġlatitude Ġ= Ġ 1 ; ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġoptional Ġint 3 2 Ġlongitude Ġ= Ġ 2 ; ĊĠĠĠĠĠĠĠĠĠ Ġ| } """. trim Margin () ĊĊĠĠĠ Ġprivate Ġval Ġrect ange Message Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġ| message ĠRectangle Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġoptional ĠPoint Ġlo Ġ= Ġ 1 ; ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġoptional ĠPoint Ġhi Ġ= Ġ 2 ; ĊĠĠĠĠĠĠĠĠĠ Ġ| } """. trim Margin () ĊĊĠĠĠ Ġprivate Ġval Ġfeature Message Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġ| message ĠFeature Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġoptional Ġstring Ġname Ġ= Ġ 1 ; ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġoptional ĠPoint Ġlocation Ġ= Ġ 2 ; ĊĠĠĠĠĠĠĠĠĠ Ġ| } """. trim Margin () ĊĊĠĠĠ Ġprivate Ġval Ġroute Note Message Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġ| message ĠRoute Note Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġoptional ĠPoint Ġlocation Ġ= Ġ 1 ; ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġoptional Ġstring Ġmessage Ġ= Ġ 2 ; ĊĠĠĠĠĠĠĠĠĠ Ġ| } """. trim Margin () ĊĊĠĠĠ Ġprivate Ġval Ġroute Summary Message Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġ| message ĠRoute Summary Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġoptional Ġint 3 2 Ġpoint _ count Ġ= Ġ 1 ; ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġoptional Ġint 3 2 Ġfeature _ count Ġ= Ġ 2 ; ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġoptional Ġint 3 2 Ġdistance Ġ= Ġ 3 ; ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġoptional Ġint 3 2 Ġelapsed _ time Ġ= Ġ 4 ; ĊĠĠĠĠĠĠĠĠĠ Ġ| } """. trim Margin () ĊĠ Ġ} Ċ } Ċ