diff --git a/composeApp/src/commonMain/kotlin/moe/lava/banksia/api/ptv/RouteType.kt b/composeApp/src/commonMain/kotlin/moe/lava/banksia/api/ptv/structures/RouteType.kt similarity index 97% rename from composeApp/src/commonMain/kotlin/moe/lava/banksia/api/ptv/RouteType.kt rename to composeApp/src/commonMain/kotlin/moe/lava/banksia/api/ptv/structures/RouteType.kt index 7174378..2490e30 100644 --- a/composeApp/src/commonMain/kotlin/moe/lava/banksia/api/ptv/RouteType.kt +++ b/composeApp/src/commonMain/kotlin/moe/lava/banksia/api/ptv/structures/RouteType.kt @@ -1,4 +1,4 @@ -package moe.lava.banksia.api.ptv +package moe.lava.banksia.api.ptv.structures import androidx.compose.foundation.Image import androidx.compose.runtime.Composable diff --git a/composeApp/src/commonMain/kotlin/moe/lava/banksia/ui/Searcher.kt b/composeApp/src/commonMain/kotlin/moe/lava/banksia/ui/Searcher.kt index 8c746d3..a2c65a1 100644 --- a/composeApp/src/commonMain/kotlin/moe/lava/banksia/ui/Searcher.kt +++ b/composeApp/src/commonMain/kotlin/moe/lava/banksia/ui/Searcher.kt @@ -21,19 +21,16 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateListOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember -import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp -import moe.lava.banksia.api.ptv.ComposableIcon import moe.lava.banksia.api.ptv.PtvService -import moe.lava.banksia.api.ptv.Route - +import moe.lava.banksia.api.ptv.structures.ComposableIcon +import moe.lava.banksia.api.ptv.structures.Route @OptIn(ExperimentalMaterial3Api::class) @Composable diff --git a/shared/src/commonMain/kotlin/moe/lava/banksia/api/ptv/PtvService.kt b/shared/src/commonMain/kotlin/moe/lava/banksia/api/ptv/PtvService.kt index a35ec10..cdbe71a 100644 --- a/shared/src/commonMain/kotlin/moe/lava/banksia/api/ptv/PtvService.kt +++ b/shared/src/commonMain/kotlin/moe/lava/banksia/api/ptv/PtvService.kt @@ -15,41 +15,15 @@ import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable import kotlinx.serialization.json.Json import moe.lava.banksia.Constants +import moe.lava.banksia.api.ptv.structures.Route import moe.lava.banksia.log import okio.ByteString.Companion.encodeUtf8 -// Ordinals used for sorting in searcher -enum class GtfsSubType(val value: Int) { - MetroTrain(2), - MetroTram(3), - MetroBus(4), - RegionalTrain(1), - RegionalCoach(5), - RegionalBus(6), - SkyBus(11), - Interstate(10), +object Responses { + @Serializable + data class Route(val routes: List) } -@Serializable -data class Route( - @SerialName("route_type") val routeType: RouteType, - @SerialName("route_id") val routeId: Int, - @SerialName("route_number") val routeNumber: String, - @SerialName("route_name") val routeName: String, - @SerialName("route_gtfs_id") val routeGtfsId: String, -) { - fun gtfsSubType(): GtfsSubType? { - GtfsSubType.entries.forEach { - if (routeGtfsId.startsWith(it.value.toString())) - return it - } - return null - } -} - -@Serializable -data class RouteResponse(val routes: List) - class PtvService { private val client = HttpClient() { install(ContentNegotiation) { @@ -74,7 +48,7 @@ class PtvService { } suspend fun routes(): List { - val response: RouteResponse = client.get("routes").body() + val response: Responses.Route = client.get("routes").body() return response.routes } } diff --git a/shared/src/commonMain/kotlin/moe/lava/banksia/api/ptv/structures/Route.kt b/shared/src/commonMain/kotlin/moe/lava/banksia/api/ptv/structures/Route.kt new file mode 100644 index 0000000..00686c4 --- /dev/null +++ b/shared/src/commonMain/kotlin/moe/lava/banksia/api/ptv/structures/Route.kt @@ -0,0 +1,34 @@ +package moe.lava.banksia.api.ptv.structures + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +// Ordinals used for sorting in searcher +enum class GtfsSubType(val value: Int) { + MetroTrain(2), + MetroTram(3), + MetroBus(4), + RegionalTrain(1), + RegionalCoach(5), + RegionalBus(6), + SkyBus(11), + Interstate(10), +} + +@Serializable +data class Route( + @SerialName("route_type") val routeType: RouteType, + @SerialName("route_id") val routeId: Int, + @SerialName("route_number") val routeNumber: String, + @SerialName("route_name") val routeName: String, + @SerialName("route_gtfs_id") val routeGtfsId: String, +) { + fun gtfsSubType(): GtfsSubType? { + GtfsSubType.entries.forEach { + if (routeGtfsId.startsWith(it.value.toString())) + return it + } + return null + } +} + diff --git a/shared/src/commonMain/kotlin/moe/lava/banksia/api/ptv/RouteType.kt b/shared/src/commonMain/kotlin/moe/lava/banksia/api/ptv/structures/RouteType.kt similarity index 84% rename from shared/src/commonMain/kotlin/moe/lava/banksia/api/ptv/RouteType.kt rename to shared/src/commonMain/kotlin/moe/lava/banksia/api/ptv/structures/RouteType.kt index 6dc9f1c..3f5cb9f 100644 --- a/shared/src/commonMain/kotlin/moe/lava/banksia/api/ptv/RouteType.kt +++ b/shared/src/commonMain/kotlin/moe/lava/banksia/api/ptv/structures/RouteType.kt @@ -1,4 +1,4 @@ -package moe.lava.banksia.api.ptv +package moe.lava.banksia.api.ptv.structures import kotlinx.serialization.KSerializer import kotlinx.serialization.Serializable @@ -9,7 +9,8 @@ import kotlinx.serialization.encoding.Decoder import kotlinx.serialization.encoding.Encoder private object RouteTypeSerializer : KSerializer { - override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor(RouteType::class.qualifiedName!!, + override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor( + RouteType::class.qualifiedName!!, PrimitiveKind.INT) override fun serialize(encoder: Encoder, value: RouteType) { @@ -20,8 +21,6 @@ private object RouteTypeSerializer : KSerializer { val index = decoder.decodeInt() return RouteType.entries[index] } - - override fun toString(): String = "EnumOrdinalSerializer<${descriptor.serialName}>" } @Serializable(with = RouteTypeSerializer::class)