Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
d2ec6e7
feat(04-01): extend parser content type resolution and add Ktor form/…
halotukozak Mar 23, 2026
c079acd
test(04-01): add CONT-03 verification tests for response code handling
halotukozak Mar 23, 2026
a11d499
test(04-02): add failing tests for multipart/form-data code generation
halotukozak Mar 23, 2026
2a4582a
feat(04-02): implement multipart/form-data code generation
halotukozak Mar 23, 2026
a23e14a
test(04-02): add tests for form-urlencoded code generation
halotukozak Mar 23, 2026
ee86c75
Merge branch 'master' into feat/content-types
halotukozak Mar 24, 2026
b364b37
refactor: streamline request body parameter handling in ClientGenerator
halotukozak Mar 25, 2026
8505d71
refactor: simplify content type and schema binding in SpecParser
halotukozak Mar 25, 2026
12778ac
refactor: clean up redundant HTTP_HEADERS_OBJECT usage and improve pa…
halotukozak Mar 25, 2026
cf4debc
refactor: streamline request body schema handling and simplify `TypeR…
halotukozak Mar 26, 2026
6db98ee
refactor: relocate and modularize `ApiClientBaseGenerator` into `clie…
halotukozak Mar 26, 2026
e7899b7
refactor: modularize `ClientGenerator` and relocate to `client` package
halotukozak Mar 26, 2026
ab8652b
refactor: extract and modularize parameter generation logic into `Par…
halotukozak Mar 26, 2026
7aec86a
refactor: make `TypeMapping` internal, add `context` receiver, and cl…
halotukozak Mar 26, 2026
dd42b88
refactor: add `Package` interfaces and helper operators for streamlin…
halotukozak Mar 26, 2026
1cd045a
refactor: simplify `SerializersModuleGenerator`, make it `internal`, …
halotukozak Mar 26, 2026
c958557
refactor: update imports and simplify `CodeGenerator` logic to use `c…
halotukozak Mar 26, 2026
5b5a4cc
refactor: add constants for common content types in `Constants.kt`
halotukozak Mar 26, 2026
5df3fed
refactor: add utility extensions and helpers for `TypeRef` property a…
halotukozak Mar 26, 2026
f3df1e2
refactor: replace string-based content type constants with `ContentTy…
halotukozak Mar 26, 2026
804f26b
refactor: make `ModelGenerator` an `internal object`, streamline `con…
halotukozak Mar 26, 2026
0abd250
refactor: replace `listOf` with varargs in test utilities and streaml…
halotukozak Mar 26, 2026
ed45921
refactor: modularize and simplify body generation logic
halotukozak Mar 26, 2026
8ec7818
refactor: remove obsolete generators and their dependencies
halotukozak Mar 26, 2026
b46519a
refactor: inline `toTypeName` logic into `TypeRef` and remove `TypeMa…
halotukozak Mar 26, 2026
7673707
refactor: remove redundant `Companion` references in generator logic
halotukozak Mar 26, 2026
e933075
refactor: clean up imports and inline multi-line builder definitions
halotukozak Mar 26, 2026
7db82ab
Merge branch 'master' into feat/content-types
halotukozak Mar 26, 2026
17e9777
refactor: update URL construction logic in `BodyGenerator`
halotukozak Mar 26, 2026
baef3ce
refactor: optimize enums and extensions, improve visibility modifiers
halotukozak Mar 30, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions core/src/main/kotlin/com/avsystem/justworks/core/Utils.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.avsystem.justworks.core

import kotlin.enums.enumEntries

inline fun <reified T : Enum<T>> String.toEnumOrNull(): T? = enumEntries<T>().find { it.name.equals(this, true) }

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
package com.avsystem.justworks.core.gen

import com.avsystem.justworks.core.gen.client.ClientGenerator
import com.avsystem.justworks.core.gen.model.ModelGenerator
import com.avsystem.justworks.core.gen.shared.ApiClientBaseGenerator
import com.avsystem.justworks.core.gen.shared.ApiResponseGenerator
import com.avsystem.justworks.core.gen.shared.SerializersModuleGenerator
import com.avsystem.justworks.core.model.ApiSpec
import java.io.File

Expand All @@ -14,14 +19,14 @@ object CodeGenerator {
spec: ApiSpec,
modelPackage: String,
apiPackage: String,
outputDir: File
): Result {
val modelFiles = ModelGenerator(modelPackage).generate(spec)
outputDir: File,
): Result = context(ModelPackage(modelPackage), ApiPackage(apiPackage)) {
val modelFiles = ModelGenerator.generate(spec)
modelFiles.forEach { it.writeTo(outputDir) }

val hasPolymorphicTypes = modelFiles.any { it.name == SerializersModuleGenerator.FILE_NAME }

val clientFiles = ClientGenerator(apiPackage, modelPackage).generate(spec, hasPolymorphicTypes)
val clientFiles = ClientGenerator.generate(spec, hasPolymorphicTypes)
clientFiles.forEach { it.writeTo(outputDir) }

return Result(modelFiles.size, clientFiles.size)
Expand Down
13 changes: 13 additions & 0 deletions core/src/main/kotlin/com/avsystem/justworks/core/gen/Names.kt
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,19 @@ val PUT_FUN = MemberName("io.ktor.client.request", "put")
val DELETE_FUN = MemberName("io.ktor.client.request", "delete")
val PATCH_FUN = MemberName("io.ktor.client.request", "patch")

// ============================================================================
// Ktor Forms & Multipart
// ============================================================================

val SUBMIT_FORM_FUN = MemberName("io.ktor.client.request.forms", "submitForm")
val SUBMIT_FORM_WITH_BINARY_DATA_FUN = MemberName("io.ktor.client.request.forms", "submitFormWithBinaryData")
val FORM_DATA_FUN = MemberName("io.ktor.client.request.forms", "formData")
val CHANNEL_PROVIDER = ClassName("io.ktor.client.request.forms", "ChannelProvider")
val PARAMETERS_FUN = MemberName("io.ktor.http", "parameters")
val CONTENT_TYPE_CLASS = ClassName("io.ktor.http", "ContentType")
val HEADERS_CLASS = ClassName("io.ktor.http", "Headers")
val HTTP_METHOD_CLASS = ClassName("io.ktor.http", "HttpMethod")

// ============================================================================
// kotlinx.serialization
// ============================================================================
Expand Down
20 changes: 20 additions & 0 deletions core/src/main/kotlin/com/avsystem/justworks/core/gen/Packages.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.avsystem.justworks.core.gen

import com.squareup.kotlinpoet.ClassName
import com.squareup.kotlinpoet.MemberName

internal sealed interface Package {
val name: String
}

@JvmInline
internal value class ModelPackage(override val name: String) : Package

@JvmInline
internal value class ApiPackage(override val name: String) : Package

internal operator fun ClassName.Companion.invoke(pkg: Package, vararg simpleNames: String): ClassName =
ClassName(pkg.name, *simpleNames)

internal operator fun MemberName.Companion.invoke(pkg: Package, memberName: String): MemberName =
MemberName(pkg.name, memberName)

This file was deleted.

Loading
Loading