From 9d9ca56bc4b4e3f175c8889cc9bbb23b960182ae Mon Sep 17 00:00:00 2001 From: jay-tux Date: Fri, 25 Apr 2025 19:15:46 +0200 Subject: [PATCH] Started implementing client --- frontend/.gitignore | 1 + .../com/jaytux/simd/frontend/Greeting.kt | 4 +- .../com/jaytux/simd/frontend/Platform.kt | 6 +- .../com/jaytux/simd/frontend/client/Client.kt | 76 +++++++++++++++++++ .../com/jaytux/simd/frontend/Platform.jvm.kt | 7 +- .../jaytux/simd/frontend/Platform.wasmJs.kt | 7 +- frontend/kotlin-js-store/yarn.lock | 10 +++ 7 files changed, 96 insertions(+), 15 deletions(-) create mode 100644 frontend/composeApp/src/commonMain/kotlin/com/jaytux/simd/frontend/client/Client.kt diff --git a/frontend/.gitignore b/frontend/.gitignore index 7d9c0e4..c554f29 100644 --- a/frontend/.gitignore +++ b/frontend/.gitignore @@ -16,3 +16,4 @@ captures !*.xcodeproj/project.xcworkspace/ !*.xcworkspace/contents.xcworkspacedata **/xcshareddata/WorkspaceSettings.xcsettings +**/.env diff --git a/frontend/composeApp/src/commonMain/kotlin/com/jaytux/simd/frontend/Greeting.kt b/frontend/composeApp/src/commonMain/kotlin/com/jaytux/simd/frontend/Greeting.kt index b324c95..dc92ff9 100644 --- a/frontend/composeApp/src/commonMain/kotlin/com/jaytux/simd/frontend/Greeting.kt +++ b/frontend/composeApp/src/commonMain/kotlin/com/jaytux/simd/frontend/Greeting.kt @@ -1,9 +1,7 @@ package com.jaytux.simd.frontend class Greeting { - private val platform = getPlatform() - fun greet(): String { - return "Hello, ${platform.name}!" + return "Hello, X!" } } \ No newline at end of file diff --git a/frontend/composeApp/src/commonMain/kotlin/com/jaytux/simd/frontend/Platform.kt b/frontend/composeApp/src/commonMain/kotlin/com/jaytux/simd/frontend/Platform.kt index c51c9ff..fffb17b 100644 --- a/frontend/composeApp/src/commonMain/kotlin/com/jaytux/simd/frontend/Platform.kt +++ b/frontend/composeApp/src/commonMain/kotlin/com/jaytux/simd/frontend/Platform.kt @@ -1,7 +1,5 @@ package com.jaytux.simd.frontend -interface Platform { - val name: String -} +import io.ktor.client.* -expect fun getPlatform(): Platform \ No newline at end of file +expect fun getKtorClient(): HttpClient \ No newline at end of file diff --git a/frontend/composeApp/src/commonMain/kotlin/com/jaytux/simd/frontend/client/Client.kt b/frontend/composeApp/src/commonMain/kotlin/com/jaytux/simd/frontend/client/Client.kt new file mode 100644 index 0000000..5323e37 --- /dev/null +++ b/frontend/composeApp/src/commonMain/kotlin/com/jaytux/simd/frontend/client/Client.kt @@ -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 { + 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, + val instructions: List?, + val performance: List? + ) + + @Serializable + data class Versioning( + val intelVersion: String, val intelUpdate: LocalDate, val scrapeDate: LocalDate + ) + + @Serializable data class Paginated(val page: Long, val totalPages: Long, val items: List) + + interface PaginatedResponse { + fun currentItems(): List + fun hasNextPage(): Boolean + suspend fun loadNextPage() + } + + suspend fun getAll(): PaginatedResponse { + // + } +} \ No newline at end of file diff --git a/frontend/composeApp/src/desktopMain/kotlin/com/jaytux/simd/frontend/Platform.jvm.kt b/frontend/composeApp/src/desktopMain/kotlin/com/jaytux/simd/frontend/Platform.jvm.kt index c077abb..b7fddb1 100644 --- a/frontend/composeApp/src/desktopMain/kotlin/com/jaytux/simd/frontend/Platform.jvm.kt +++ b/frontend/composeApp/src/desktopMain/kotlin/com/jaytux/simd/frontend/Platform.jvm.kt @@ -1,7 +1,6 @@ package com.jaytux.simd.frontend -class JVMPlatform: Platform { - override val name: String = "Java ${System.getProperty("java.version")}" -} +import io.ktor.client.* +import io.ktor.client.engine.cio.* -actual fun getPlatform(): Platform = JVMPlatform() \ No newline at end of file +actual fun getKtorClient(): HttpClient = HttpClient(CIO) \ No newline at end of file diff --git a/frontend/composeApp/src/wasmJsMain/kotlin/com/jaytux/simd/frontend/Platform.wasmJs.kt b/frontend/composeApp/src/wasmJsMain/kotlin/com/jaytux/simd/frontend/Platform.wasmJs.kt index 235be28..a12ba8d 100644 --- a/frontend/composeApp/src/wasmJsMain/kotlin/com/jaytux/simd/frontend/Platform.wasmJs.kt +++ b/frontend/composeApp/src/wasmJsMain/kotlin/com/jaytux/simd/frontend/Platform.wasmJs.kt @@ -1,7 +1,6 @@ package com.jaytux.simd.frontend -class WasmPlatform: Platform { - override val name: String = "Web with Kotlin/Wasm" -} +import io.ktor.client.* +import io.ktor.client.engine.js.* -actual fun getPlatform(): Platform = WasmPlatform() \ No newline at end of file +actual fun getKtorClient(): HttpClient = HttpClient(Js) \ No newline at end of file diff --git a/frontend/kotlin-js-store/yarn.lock b/frontend/kotlin-js-store/yarn.lock index 7df9e5c..ac81ac1 100644 --- a/frontend/kotlin-js-store/yarn.lock +++ b/frontend/kotlin-js-store/yarn.lock @@ -52,6 +52,11 @@ "@jridgewell/resolve-uri" "^3.1.0" "@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": version "2.0.5" 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" 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: version "8.18.1" resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.1.tgz#ea131d3784e1dfdff91adb0a4a116b127515e3cb"