refactor: move route into its own package

This commit is contained in:
LavaDesu 2025-04-15 14:19:17 +10:00
parent 4cd160cc47
commit 2551f67323
Signed by: cilly
GPG key ID: 6500251E087653C9
5 changed files with 45 additions and 41 deletions

View file

@ -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<moe.lava.banksia.api.ptv.structures.Route>)
}
@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<Route>)
class PtvService {
private val client = HttpClient() {
install(ContentNegotiation) {
@ -74,7 +48,7 @@ class PtvService {
}
suspend fun routes(): List<Route> {
val response: RouteResponse = client.get("routes").body()
val response: Responses.Route = client.get("routes").body()
return response.routes
}
}

View file

@ -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
}
}

View file

@ -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<RouteType> {
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<RouteType> {
val index = decoder.decodeInt()
return RouteType.entries[index]
}
override fun toString(): String = "EnumOrdinalSerializer<${descriptor.serialName}>"
}
@Serializable(with = RouteTypeSerializer::class)