-
Notifications
You must be signed in to change notification settings - Fork 3
Routing by Annotations
Thiago Santos edited this page Nov 17, 2024
·
2 revisions
A compile-time routes generator.
import dev.programadorthi.routing.generated.configure
@Route(path = "/create")
fun something() {
// ...
}
val router = routing {
configure()
}
router.call(uri = "/create")
Using ksp
settings.gradle
pluginManagement {
repositories {
gradlePluginPortal()
mavenCentral()
}
}
build.gradle
plugins {
kotlin("multiplatform")
id("com.google.devtools.ksp") version "2.0.10-1.0.24"
id("dev.programadorthi.routing") version <routing-version>
}
kotlin {
sourceSets {
commonMain {
dependencies {
implementation("dev.programadorthi.routing:ksp-core-annotations:<routing-version>")
// other dependency as core, compose, voyager, etc.
}
}
}
}
Important
A function must be top-level
@Route(path = "/create")
fun something() {
// ...
}
By default function parameters must match to path parameters
@Route(path = "/create/{id}")
fun something(id: Int) {
// ...
}
A custom name can be used applying annotation @Path
import dev.programadorthi.routing.annotation.Path
@Route(path = "/create/{id}")
fun something(@Path("id") userId: Int) {
// ...
}
@Route(path = "/create/{id?}")
fun something(id: Int?) {
// ...
}
@Route(path = "/path/{name}", name = "named")
fun something(name: String) {
//...
}
import dev.programadorthi.routing.annotation.Body
@Route("/with-body")
fun something(@Body user: User) {
//...
}
Optional body
import dev.programadorthi.routing.annotation.Body
@Route("/with-body")
fun something(@Body user: User?) {
//...
}
More ways to use @Route
annotation checkout the Routes sample.
@Composable
top-level function can be annotated as well to route to it.
build.gradle
kotlin {
sourceSets {
commonMain {
dependencies {
implementation("dev.programadorthi.routing:ksp-core-annotations:<routing-version>")
implementation("dev.programadorthi.routing:compose:<routing-version>")
}
}
}
}
Important
A composable function must be top-level
@Route(path = "/create")
@Composable
fun something() {
// ...
}
More ways to use @Route
annotation with @Composable
functions checkout the Composables sample.
Voyager Screen
can be annotated as well to route to it.
build.gradle
kotlin {
sourceSets {
commonMain {
dependencies {
implementation("dev.programadorthi.routing:ksp-core-annotations:<routing-version>")
implementation("dev.programadorthi.routing:voyager:<routing-version>")
}
}
}
}
Just apply the annotation to a Screen
to handle it:
@Route("/screen")
class MyScreen : Screen {
@Composable
override fun Content() {
//...
}
}
@Route("/screen")
class MyScreen : Screen {
@Route("/screen/{id}")
constructor(id: Int) : this()
@Route("/screen/user")
constructor(@Body user: User?) : this()
@Composable
override fun Content() {
//...
}
}
More ways to use @Route
annotation with Screen
checkout the Screens sample.