Skip to content

Commit

Permalink
blah
Browse files Browse the repository at this point in the history
  • Loading branch information
brizzbuzz committed Aug 4, 2024
1 parent e7d233d commit 3ff25f8
Show file tree
Hide file tree
Showing 4 changed files with 56 additions and 10 deletions.
4 changes: 3 additions & 1 deletion codegen/src/main/kotlin/io/bkbn/skribe/codegen/Skribe.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import io.bkbn.skribe.codegen.generator.EnumGenerator
import io.bkbn.skribe.codegen.generator.ModelGenerator
import io.bkbn.skribe.codegen.generator.RequestGenerator
import io.bkbn.skribe.codegen.generator.SerializerGenerator
import io.bkbn.skribe.codegen.generator.TypeAliasGenerator
import io.swagger.parser.OpenAPIParser

object Skribe {
Expand All @@ -21,8 +22,9 @@ object Skribe {
val models = ModelGenerator.generate()
val serializers = SerializerGenerator.generate()
val requests = RequestGenerator.generate()
val typeAliases = TypeAliasGenerator.generate()

enums + models + serializers + requests
enums + models + serializers + requests + typeAliases
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ sealed interface SkribeSchema {
fun toKotlinTypeName(): TypeName
}

sealed interface SkribeScalarSchema : SkribeSchema

sealed interface SerializableSchema {
val utilPackage: String
val serializerTypeName: TypeName
Expand All @@ -36,7 +38,7 @@ data class SkribeComposedSchema(
data class SkribeStringSchema(
override val name: String,
override val requiresSerialization: Boolean = false,
) : SkribeSchema {
) : SkribeScalarSchema {
context(SkribeSpec)
override fun toKotlinTypeName(): TypeName = String::class.asClassName()
}
Expand All @@ -62,7 +64,7 @@ data class SkribeUuidSchema(
override val name: String,
override val requiresSerialization: Boolean = true,
override val utilPackage: String,
) : SkribeSchema, SerializableSchema {
) : SkribeScalarSchema, SerializableSchema {
context(SkribeSpec)
override fun toKotlinTypeName(): TypeName = ClassName("com.benasher44.uuid", "Uuid")
override val serializerTypeName: TypeName = ClassName(utilPackage, "UuidSerializer")
Expand All @@ -80,39 +82,39 @@ data class SkribeReferenceSchema(
data class SkribeDateSchema(
override val name: String,
override val requiresSerialization: Boolean = false,
) : SkribeSchema {
) : SkribeScalarSchema {
context(SkribeSpec)
override fun toKotlinTypeName(): TypeName = LocalDate::class.asClassName()
}

data class SkribeDateTimeSchema(
override val name: String,
override val requiresSerialization: Boolean = false,
) : SkribeSchema {
) : SkribeScalarSchema {
context(SkribeSpec)
override fun toKotlinTypeName(): TypeName = Instant::class.asClassName()
}

data class SkribeBooleanSchema(
override val name: String,
override val requiresSerialization: Boolean = false,
) : SkribeSchema {
) : SkribeScalarSchema {
context(SkribeSpec)
override fun toKotlinTypeName(): TypeName = Boolean::class.asClassName()
}

data class SkribeIntegerSchema(
override val name: String,
override val requiresSerialization: Boolean = false,
) : SkribeSchema {
) : SkribeScalarSchema {
context(SkribeSpec)
override fun toKotlinTypeName(): TypeName = Int::class.asClassName()
}

data class SkribeEmailSchema(
override val name: String,
override val requiresSerialization: Boolean = false,
) : SkribeSchema {
) : SkribeScalarSchema {
context(SkribeSpec)
override fun toKotlinTypeName(): TypeName = String::class.asClassName()
}
Expand All @@ -121,7 +123,7 @@ data class SkribeNumberSchema(
override val name: String,
override val requiresSerialization: Boolean = true,
override val utilPackage: String,
) : SkribeSchema, SerializableSchema {
) : SkribeScalarSchema, SerializableSchema {
context(SkribeSpec)
override fun toKotlinTypeName(): TypeName = Number::class.asClassName()
override val serializerTypeName: TypeName = ClassName(utilPackage, "NumberSerializer")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ data object ModelGenerator : Generator {
context(SkribeSpec)
override fun generate(): List<FileSpec> =
schemas.filterIsInstance<SkribeObjectSchema>().map { schema ->
val modelPackage = "$rootPackage.model"
FileSpec.builder(modelPackage, schema.addressableName()).apply {
with(schema) { addType(toModelType()) }
}.build()
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package io.bkbn.skribe.codegen.generator

import com.benasher44.uuid.Uuid
import com.squareup.kotlinpoet.FileSpec
import com.squareup.kotlinpoet.TypeAliasSpec
import com.squareup.kotlinpoet.TypeName
import com.squareup.kotlinpoet.asTypeName
import io.bkbn.skribe.codegen.domain.SkribeSpec
import io.bkbn.skribe.codegen.domain.schema.SkribeBooleanSchema
import io.bkbn.skribe.codegen.domain.schema.SkribeDateSchema
import io.bkbn.skribe.codegen.domain.schema.SkribeDateTimeSchema
import io.bkbn.skribe.codegen.domain.schema.SkribeEmailSchema
import io.bkbn.skribe.codegen.domain.schema.SkribeIntegerSchema
import io.bkbn.skribe.codegen.domain.schema.SkribeNumberSchema
import io.bkbn.skribe.codegen.domain.schema.SkribeScalarSchema
import io.bkbn.skribe.codegen.domain.schema.SkribeSchema
import io.bkbn.skribe.codegen.domain.schema.SkribeStringSchema
import io.bkbn.skribe.codegen.domain.schema.SkribeUuidSchema
import kotlinx.datetime.Instant
import kotlinx.datetime.LocalDate

data object TypeAliasGenerator : Generator {
context(SkribeSpec)
override fun generate(): List<FileSpec> =
schemas.filterIsInstance<SkribeScalarSchema>().map { schema ->
when (schema) {
is SkribeBooleanSchema -> createTypeAlias(schema, Boolean::class.asTypeName())
is SkribeDateSchema -> createTypeAlias(schema, LocalDate::class.asTypeName())
is SkribeDateTimeSchema -> createTypeAlias(schema, Instant::class.asTypeName())
is SkribeEmailSchema -> createTypeAlias(schema, String::class.asTypeName())
is SkribeIntegerSchema -> createTypeAlias(schema, Int::class.asTypeName())
is SkribeNumberSchema -> createTypeAlias(schema, Number::class.asTypeName())
is SkribeStringSchema -> createTypeAlias(schema, String::class.asTypeName())
is SkribeUuidSchema -> createTypeAlias(schema, Uuid::class.asTypeName())
}
}

context(SkribeSpec)
private fun createTypeAlias(schema: SkribeSchema, typeName: TypeName): FileSpec =
FileSpec.builder(modelPackage, schema.name).apply {
addTypeAlias(TypeAliasSpec.builder(schema.name, typeName).build())
}.build()
}

0 comments on commit 3ff25f8

Please sign in to comment.