package Ġorg . jetbrains . ktor . routing Ċ Ċ import Ġorg . jetbrains . ktor . application .* Ċ import Ġorg . jetbrains . ktor . http .* Ċ import Ġorg . jetbrains . ktor . pipeline .* Ċ Ċ /** Ċ Ġ* ĠBuilds Ġa Ġroute Ġto Ġmatch Ġspecified Ġ[ path ] Ċ Ġ*/ Ċ fun ĠRoute . route ( path : ĠString , Ġbuild : ĠRoute . () Ġ-> ĠUnit ) Ġ= Ġcreate Route ( path ). apply ( build ) Ċ Ċ /** Ċ Ġ* ĠBuilds Ġa Ġroute Ġto Ġmatch Ġspecified Ġ[ method ] Ġand Ġ[ path ] Ċ Ġ*/ Ċ fun ĠRoute . route ( method : ĠHttpMethod , Ġpath : ĠString , Ġbuild : ĠRoute . () Ġ-> ĠUnit ): ĠRoute Ġ{ ĊĠĠĠ Ġval Ġselector Ġ= ĠHttpMethod Route Selector ( method ) ĊĠĠĠ Ġreturn Ġselect ( selector ). route ( path , Ġbuild ) Ċ } Ċ Ċ /** Ċ Ġ* ĠBuilds Ġa Ġroute Ġto Ġmatch Ġspecified Ġ[ method ] Ċ Ġ*/ Ċ fun ĠRoute . method ( method : ĠHttpMethod , Ġbody : ĠRoute . () Ġ-> ĠUnit ): ĠRoute Ġ{ ĊĠĠĠ Ġval Ġselector Ġ= ĠHttpMethod Route Selector ( method ) ĊĠĠĠ Ġreturn Ġselect ( selector ). apply ( body ) Ċ } Ċ Ċ /** Ċ Ġ* ĠBuilds Ġa Ġroute Ġto Ġmatch Ġparameter Ġwith Ġspecified Ġ[ name ] Ġand Ġ[ value ] Ċ Ġ*/ Ċ fun ĠRoute . param ( name : ĠString , Ġvalue : ĠString , Ġbuild : ĠRoute . () Ġ-> ĠUnit ): ĠRoute Ġ{ ĊĠĠĠ Ġval Ġselector Ġ= ĠConstant Parameter Route Selector ( name , Ġvalue ) ĊĠĠĠ Ġreturn Ġselect ( selector ). apply ( build ) Ċ } Ċ Ċ /** Ċ Ġ* ĠBuilds Ġa Ġroute Ġto Ġmatch Ġparameter Ġwith Ġspecified Ġ[ name ] Ġand Ġcapture Ġits Ġvalue Ċ Ġ*/ Ċ fun ĠRoute . param ( name : ĠString , Ġbuild : ĠRoute . () Ġ-> ĠUnit ): ĠRoute Ġ{ ĊĠĠĠ Ġval Ġselector Ġ= ĠParameter Route Selector ( name ) ĊĠĠĠ Ġreturn Ġselect ( selector ). apply ( build ) Ċ } Ċ Ċ /** Ċ Ġ* ĠBuilds Ġa Ġroute Ġto Ġoptionally Ġcapture Ġparameter Ġwith Ġspecified Ġ[ name ], Ġif Ġit Ġexists Ċ Ġ*/ Ċ fun ĠRoute . optional Param ( name : ĠString , Ġbuild : ĠRoute . () Ġ-> ĠUnit ): ĠRoute Ġ{ ĊĠĠĠ Ġval Ġselector Ġ= ĠOptional Parameter Route Selector ( name ) ĊĠĠĠ Ġreturn Ġselect ( selector ). apply ( build ) Ċ } Ċ Ċ /** Ċ Ġ* ĠBuilds Ġa Ġroute Ġto Ġmatch Ġheader Ġwith Ġspecified Ġ[ name ] Ġand Ġ[ value ] Ċ Ġ*/ Ċ fun ĠRoute . header ( name : ĠString , Ġvalue : ĠString , Ġbuild : ĠRoute . () Ġ-> ĠUnit ): ĠRoute Ġ{ ĊĠĠĠ Ġval Ġselector Ġ= ĠHttp Header Route Selector ( name , Ġvalue ) ĊĠĠĠ Ġreturn Ġselect ( selector ). apply ( build ) Ċ } Ċ Ċ /** Ċ Ġ* ĠBuilds Ġa Ġroute Ġto Ġmatch Ġrequests Ġwith Ġspecified Ġ[ contentType ] Ċ Ġ*/ Ċ fun ĠRoute . accept ( contentType : ĠContentType , Ġbuild : ĠRoute . () Ġ-> ĠUnit ): ĠRoute Ġ{ ĊĠĠĠ Ġval Ġselector Ġ= ĠHttp Accept Route Selector ( contentType ) ĊĠĠĠ Ġreturn Ġselect ( selector ). apply ( build ) Ċ } Ċ Ċ @ Deprecated (" This Ġfunction Ġis Ġchecking ĠAccept Ġheader , Ġuse Ġ' accept ' Ġfunction Ġinstead .", ĠReplace With (" this . accept ( contentType , Ġbuild )"), ĠDeprec ation Level . ERROR ) Ċ fun ĠRoute . contentType ( contentType : ĠContentType , Ġbuild : ĠRoute . () Ġ-> ĠUnit ): ĠRoute Ġ{ ĊĠĠĠ Ġreturn Ġheader ( HttpHeaders . Accept , Ġ"${ contentType . contentType }/${ contentType . content Subtype }", Ġbuild ) Ċ } Ċ Ċ fun ĠRoute . request ContentType ( contentType : ĠContentType , Ġbuild : ĠRoute . () Ġ-> ĠUnit ): ĠRoute Ġ{ ĊĠĠĠ Ġreturn Ġheader ( HttpHeaders . ContentType , Ġ"${ contentType . contentType }/${ contentType . content Subtype }", Ġbuild ) Ċ } Ċ Ċ /** Ċ Ġ* ĠBuilds Ġa Ġroute Ġto Ġmatch Ġ` GET ` Ġrequests Ġwith Ġspecified Ġ[ path ] Ċ Ġ*/ Ċ fun ĠRoute . get ( path : ĠString , Ġbody : ĠPipeline Interceptor < Application Call >): ĠRoute Ġ{ ĊĠĠĠ Ġreturn Ġroute ( HttpMethod . Get , Ġpath ) Ġ{ Ġhandle ( body ) Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠBuilds Ġa Ġroute Ġto Ġmatch Ġ` GET ` Ġrequests Ċ Ġ*/ Ċ fun ĠRoute . get ( body : ĠPipeline Interceptor < Application Call >): ĠRoute Ġ{ ĊĠĠĠ Ġreturn Ġmethod ( HttpMethod . Get ) Ġ{ Ġhandle ( body ) Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠBuilds Ġa Ġroute Ġto Ġmatch Ġ` POST ` Ġrequests Ġwith Ġspecified Ġ[ path ] Ċ Ġ*/ Ċ fun ĠRoute . post ( path : ĠString , Ġbody : ĠPipeline Interceptor < Application Call >): ĠRoute Ġ{ ĊĠĠĠ Ġreturn Ġroute ( HttpMethod . Post , Ġpath ) Ġ{ Ġhandle ( body ) Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠBuilds Ġa Ġroute Ġto Ġmatch Ġ` POST ` Ġrequests Ċ Ġ*/ Ċ fun ĠRoute . post ( body : ĠPipeline Interceptor < Application Call >): ĠRoute Ġ{ ĊĠĠĠ Ġreturn Ġmethod ( HttpMethod . Post ) Ġ{ Ġhandle ( body ) Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠBuilds Ġa Ġroute Ġto Ġmatch Ġ` HEAD ` Ġrequests Ġwith Ġspecified Ġ[ path ] Ċ Ġ*/ Ċ fun ĠRoute . head ( path : ĠString , Ġbody : ĠPipeline Interceptor < Application Call >): ĠRoute Ġ{ ĊĠĠĠ Ġreturn Ġroute ( HttpMethod . Head , Ġpath ) Ġ{ Ġhandle ( body ) Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠBuilds Ġa Ġroute Ġto Ġmatch Ġ` HEAD ` Ġrequests Ċ Ġ*/ Ċ fun ĠRoute . head ( body : ĠPipeline Interceptor < Application Call >): ĠRoute Ġ{ ĊĠĠĠ Ġreturn Ġmethod ( HttpMethod . Head ) Ġ{ Ġhandle ( body ) Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠBuilds Ġa Ġroute Ġto Ġmatch Ġ` PUT ` Ġrequests Ġwith Ġspecified Ġ[ path ] Ċ Ġ*/ Ċ fun ĠRoute . put ( path : ĠString , Ġbody : ĠPipeline Interceptor < Application Call >): ĠRoute Ġ{ ĊĠĠĠ Ġreturn Ġroute ( HttpMethod . Put , Ġpath ) Ġ{ Ġhandle ( body ) Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠBuilds Ġa Ġroute Ġto Ġmatch Ġ` PUT ` Ġrequests Ċ Ġ*/ Ċ fun ĠRoute . put ( body : ĠPipeline Interceptor < Application Call >): ĠRoute Ġ{ ĊĠĠĠ Ġreturn Ġmethod ( HttpMethod . Put ) Ġ{ Ġhandle ( body ) Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠBuilds Ġa Ġroute Ġto Ġmatch Ġ` DELETE ` Ġrequests Ġwith Ġspecified Ġ[ path ] Ċ Ġ*/ Ċ fun ĠRoute . delete ( path : ĠString , Ġbody : ĠPipeline Interceptor < Application Call >): ĠRoute Ġ{ ĊĠĠĠ Ġreturn Ġroute ( HttpMethod . Delete , Ġpath ) Ġ{ Ġhandle ( body ) Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠBuilds Ġa Ġroute Ġto Ġmatch Ġ` DELETE ` Ġrequests Ċ Ġ*/ Ċ fun ĠRoute . delete ( body : ĠPipeline Interceptor < Application Call >): ĠRoute Ġ{ ĊĠĠĠ Ġreturn Ġmethod ( HttpMethod . Delete ) Ġ{ Ġhandle ( body ) Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠBuilds Ġa Ġroute Ġto Ġmatch Ġ` OPTIONS ` Ġrequests Ġwith Ġspecified Ġ[ path ] Ċ Ġ*/ Ċ fun ĠRoute . options ( path : ĠString , Ġbody : ĠPipeline Interceptor < Application Call >): ĠRoute Ġ{ ĊĠĠĠ Ġreturn Ġroute ( HttpMethod . Options , Ġpath ) Ġ{ Ġhandle ( body ) Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠBuilds Ġa Ġroute Ġto Ġmatch Ġ` OPTIONS ` Ġrequests Ċ Ġ*/ Ċ fun ĠRoute . options ( body : ĠPipeline Interceptor < Application Call >): ĠRoute Ġ{ ĊĠĠĠ Ġreturn Ġmethod ( HttpMethod . Options ) Ġ{ Ġhandle ( body ) Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠCreate Ġa Ġrouting Ġentry Ġfor Ġspecified Ġpath Ċ Ġ*/ Ċ fun ĠRoute . create Route ( path : ĠString ): ĠRoute Ġ{ ĊĠĠĠ Ġval Ġparts Ġ= ĠRouting Path . parse ( path ). parts ĊĠĠĠ Ġvar Ġcurrent : ĠRoute Ġ= Ġthis ĊĠĠĠ Ġfor Ġ(( value , Ġkind ) Ġin Ġparts ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġselector Ġ= Ġwhen Ġ( kind ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRouting Path Segment Kind . Parameter Ġ-> ĠUri Part Parameter Builder . parse ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRouting Path Segment Kind . Constant Ġ-> ĠUri Part Constant Builder . parse ( value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġthere Ġmay Ġalready Ġbe Ġentry Ġwith Ġsame Ġselector , Ġso Ġjoin Ġthem ĊĠĠĠĠĠĠĠ Ġcurrent Ġ= Ġcurrent . select ( selector ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġcurrent Ċ } Ċ Ċ object ĠUri Part Parameter Builder Ġ{ ĊĠĠĠ Ġfun Ġparse ( value : ĠString ): ĠRoute Selector Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprefix Index Ġ= Ġvalue . indexOf ('{ ') ĊĠĠĠĠĠĠĠ Ġval Ġsuffix Index Ġ= Ġvalue . lastIndexOf (' }') ĊĊĠĠĠĠĠĠĠ Ġval Ġprefix Ġ= Ġif Ġ( prefix Index Ġ== Ġ 0 ) Ġnull Ġelse Ġvalue . substring ( 0 , Ġprefix Index ) ĊĠĠĠĠĠĠĠ Ġval Ġsuffix Ġ= Ġif Ġ( suffix Index Ġ== Ġvalue . length Ġ- Ġ 1 ) Ġnull Ġelse Ġvalue . substring ( suffix Index Ġ+ Ġ 1 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsignature Ġ= Ġvalue . substring ( prefix Index Ġ+ Ġ 1 , Ġsuffix Index ) ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsignature . endsWith (" ?") Ġ-> ĠUri Part Optional Parameter Route Selector ( signature . drop Last ( 1 ), Ġprefix , Ġsuffix ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsignature . endsWith (" ...") Ġ-> ĠUri Part Tail card Route Selector ( signature . drop Last ( 3 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠUri Part Parameter Route Selector ( signature , Ġprefix , Ġsuffix ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġparse Name ( value : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprefix Ġ= Ġvalue . substring Before ('{ ', Ġ"") ĊĠĠĠĠĠĠĠ Ġval Ġsuffix Ġ= Ġvalue . substring After Last (' }', Ġ"") ĊĠĠĠĠĠĠĠ Ġval Ġsignature Ġ= Ġvalue . substring ( prefix . length Ġ+ Ġ 1 , Ġvalue . length Ġ- Ġsuffix . length Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsignature . endsWith (" ?") Ġ-> Ġsignature . drop Last ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsignature . endsWith (" ...") Ġ-> Ġsignature . drop Last ( 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsignature ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ object ĠUri Part Constant Builder Ġ{ ĊĠĠĠ Ġfun Ġparse ( value : ĠString ): ĠRoute Selector Ġ= Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ"*" Ġ-> ĠUri Part Wildcard Route Selector ĊĠĠĠĠĠĠĠ Ġelse Ġ-> ĠUri Part Constant Route Selector ( value ) ĊĠĠĠ Ġ} Ċ }