Started implementing client

This commit is contained in:
jay-tux 2025-04-25 19:15:46 +02:00
parent c467796823
commit 9d9ca56bc4
Signed by: jay-tux
GPG Key ID: 84302006B056926E
7 changed files with 96 additions and 15 deletions

1
frontend/.gitignore vendored
View File

@ -16,3 +16,4 @@ captures
!*.xcodeproj/project.xcworkspace/ !*.xcodeproj/project.xcworkspace/
!*.xcworkspace/contents.xcworkspacedata !*.xcworkspace/contents.xcworkspacedata
**/xcshareddata/WorkspaceSettings.xcsettings **/xcshareddata/WorkspaceSettings.xcsettings
**/.env

View File

@ -1,9 +1,7 @@
package com.jaytux.simd.frontend package com.jaytux.simd.frontend
class Greeting { class Greeting {
private val platform = getPlatform()
fun greet(): String { fun greet(): String {
return "Hello, ${platform.name}!" return "Hello, X!"
} }
} }

View File

@ -1,7 +1,5 @@
package com.jaytux.simd.frontend package com.jaytux.simd.frontend
interface Platform { import io.ktor.client.*
val name: String
}
expect fun getPlatform(): Platform expect fun getKtorClient(): HttpClient

View File

@ -0,0 +1,76 @@
package com.jaytux.simd.frontend.client
import com.jaytux.simd.frontend.getKtorClient
import io.ktor.client.*
import kotlinx.datetime.LocalDate
import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializable
import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import kotlin.uuid.ExperimentalUuidApi
import kotlin.uuid.Uuid
@OptIn(ExperimentalUuidApi::class)
object Client {
val httpClient: HttpClient by lazy { getKtorClient() }
object UUIDSerializer : KSerializer<Uuid> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("UUID", PrimitiveKind.STRING)
override fun deserialize(decoder: Decoder): Uuid = try {
Uuid.parse(decoder.decodeString())
} catch (e: IllegalArgumentException) {
throw IllegalArgumentException("Invalid UUID format")
}
override fun serialize(encoder: Encoder, value: Uuid) = encoder.encodeString(value.toString())
}
@Serializable
data class IntrinsicSummary constructor(@Serializable(with = UUIDSerializer::class) val id: Uuid, val name: String)
@Serializable
data class Param(val name: String, val type: String)
@Serializable
data class Instruction(val mnemonic: String, val xed: String, val form: String?)
@Serializable
data class PlatformPerformance(val platform: String, val latency: Float?, val throughput: Float?)
@Serializable
data class IntrinsicDetails(
@Serializable(with = UUIDSerializer::class) val id: Uuid,
val name: String,
val returnType: String,
val returnVar: String?,
val description: String,
val operations: String?,
val category: String,
val cpuid: String?,
val tech: String,
val params: List<Param>,
val instructions: List<Instruction>?,
val performance: List<PlatformPerformance>?
)
@Serializable
data class Versioning(
val intelVersion: String, val intelUpdate: LocalDate, val scrapeDate: LocalDate
)
@Serializable data class Paginated<T>(val page: Long, val totalPages: Long, val items: List<T>)
interface PaginatedResponse<T> {
fun currentItems(): List<T>
fun hasNextPage(): Boolean
suspend fun loadNextPage()
}
suspend fun getAll(): PaginatedResponse<IntrinsicSummary> {
//
}
}

View File

@ -1,7 +1,6 @@
package com.jaytux.simd.frontend package com.jaytux.simd.frontend
class JVMPlatform: Platform { import io.ktor.client.*
override val name: String = "Java ${System.getProperty("java.version")}" import io.ktor.client.engine.cio.*
}
actual fun getPlatform(): Platform = JVMPlatform() actual fun getKtorClient(): HttpClient = HttpClient(CIO)

View File

@ -1,7 +1,6 @@
package com.jaytux.simd.frontend package com.jaytux.simd.frontend
class WasmPlatform: Platform { import io.ktor.client.*
override val name: String = "Web with Kotlin/Wasm" import io.ktor.client.engine.js.*
}
actual fun getPlatform(): Platform = WasmPlatform() actual fun getKtorClient(): HttpClient = HttpClient(Js)

View File

@ -52,6 +52,11 @@
"@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/resolve-uri" "^3.1.0"
"@jridgewell/sourcemap-codec" "^1.4.14" "@jridgewell/sourcemap-codec" "^1.4.14"
"@js-joda/core@3.2.0":
version "3.2.0"
resolved "https://registry.yarnpkg.com/@js-joda/core/-/core-3.2.0.tgz#3e61e21b7b2b8a6be746df1335cf91d70db2a273"
integrity sha512-PMqgJ0sw5B7FKb2d5bWYIoxjri+QlW/Pys7+Rw82jSH0QN3rB05jZ/VrrsUdh1w4+i2kw9JOejXGq/KhDOX7Kg==
"@leichtgewicht/ip-codec@^2.0.1": "@leichtgewicht/ip-codec@^2.0.1":
version "2.0.5" version "2.0.5"
resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz#4fc56c15c580b9adb7dc3c333a134e540b44bfb1" resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz#4fc56c15c580b9adb7dc3c333a134e540b44bfb1"
@ -2837,6 +2842,11 @@ wrappy@1:
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
ws@8.18.0:
version "8.18.0"
resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc"
integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==
ws@^8.13.0: ws@^8.13.0:
version "8.18.1" version "8.18.1"
resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.1.tgz#ea131d3784e1dfdff91adb0a4a116b127515e3cb" resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.1.tgz#ea131d3784e1dfdff91adb0a4a116b127515e3cb"