libeufin

Integration and sandbox testing for FinTech APIs and data formats
Log | Files | Refs | Submodules | README | LICENSE

route.kt (1386B)


      1 /*
      2  * This file is part of LibEuFin.
      3  * Copyright (C) 2024 Taler Systems S.A.
      4 
      5  * LibEuFin is free software; you can redistribute it and/or modify
      6  * it under the terms of the GNU Affero General Public License as
      7  * published by the Free Software Foundation; either version 3, or
      8  * (at your option) any later version.
      9 
     10  * LibEuFin is distributed in the hope that it will be useful, but
     11  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
     12  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Affero General
     13  * Public License for more details.
     14 
     15  * You should have received a copy of the GNU Affero General Public
     16  * License along with LibEuFin; see the file COPYING.  If not, see
     17  * <http://www.gnu.org/licenses/>
     18  */
     19 
     20 package tech.libeufin.common.api
     21 
     22 import io.ktor.server.application.*
     23 import io.ktor.server.routing.*
     24 import io.ktor.util.pipeline.*
     25 
     26 fun Route.intercept(name: String, build: Route.() -> Unit, lambda: suspend ApplicationCall.() -> Unit): Route {
     27     val plugin = createRouteScopedPlugin(name) {
     28         onCall { call -> call.lambda() }
     29     }
     30     val subRoute = createChild(object : RouteSelector() {
     31         override suspend fun evaluate(context: RoutingResolveContext, segmentIndex: Int): RouteSelectorEvaluation =
     32             RouteSelectorEvaluation.Transparent
     33     })
     34     subRoute.install(plugin)
     35     subRoute.build()
     36     return subRoute
     37 }