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 61f9264 commit e7d233d
Show file tree
Hide file tree
Showing 6 changed files with 77 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import com.squareup.kotlinpoet.AnnotationSpec
import com.squareup.kotlinpoet.FileSpec
import com.squareup.kotlinpoet.FunSpec
import com.squareup.kotlinpoet.KModifier
import com.squareup.kotlinpoet.ParameterSpec
import com.squareup.kotlinpoet.PropertySpec
import com.squareup.kotlinpoet.TypeSpec
import io.bkbn.skribe.codegen.domain.SkribeSpec
Expand Down Expand Up @@ -40,7 +41,15 @@ data object ModelGenerator : Generator {
primaryConstructor(
FunSpec.constructorBuilder().apply {
properties.forEach { (name, schema) ->
addParameter(name.addressableName(), schema.toKotlinTypeName())
addParameter(ParameterSpec.builder(
name.addressableName(),
schema.toKotlinTypeName().copy(nullable = name.value !in required)
).apply {
if (name.value !in required) {
defaultValue("null")
}
}.build()
)
}
}.build()
)
Expand Down Expand Up @@ -73,24 +82,25 @@ data object ModelGenerator : Generator {
}
}

context(SkribeSpec)
context(SkribeSpec, SkribeObjectSchema)
private fun constructModelProperty(name: SkribeObjectSchema.PropertyName, schema: SkribeSchema) =
PropertySpec.builder(name.addressableName(), schema.toKotlinTypeName()).apply {
initializer(name.addressableName())
if (name.requiresSerialization()) {
addAnnotation(
AnnotationSpec.builder(SerialName::class).apply {
addMember("%S", name.value)
}.build()
)
}
if (schema.requiresSerialization) {
require(schema is SerializableSchema) { "Schema $schema does not implement SerializableSchema" }
addAnnotation(
AnnotationSpec.builder(Serializable::class).apply {
addMember("with = %T::class", (schema as SerializableSchema).serializerTypeName)
}.build()
)
}
}.build()
PropertySpec.builder(name.addressableName(), schema.toKotlinTypeName().copy(nullable = name.value !in required))
.apply {
initializer(name.addressableName())
if (name.requiresSerialization()) {
addAnnotation(
AnnotationSpec.builder(SerialName::class).apply {
addMember("%S", name.value)
}.build()
)
}
if (schema.requiresSerialization) {
require(schema is SerializableSchema) { "Schema $schema does not implement SerializableSchema" }
addAnnotation(
AnnotationSpec.builder(Serializable::class).apply {
addMember("with = %T::class", (schema as SerializableSchema).serializerTypeName)
}.build()
)
}
}.build()
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import com.squareup.kotlinpoet.FileSpec
import com.squareup.kotlinpoet.FunSpec
import com.squareup.kotlinpoet.KModifier
import com.squareup.kotlinpoet.MemberName
import com.squareup.kotlinpoet.ParameterSpec
import com.squareup.kotlinpoet.asTypeName
import io.bkbn.skribe.codegen.domain.SkribeParameter
import io.bkbn.skribe.codegen.domain.SkribeParameterLiteral
Expand Down Expand Up @@ -111,9 +112,16 @@ data object RequestGenerator : Generator {

private fun FunSpec.Builder.addParameterToRequest(param: SkribeParameterLiteral) {
addParameter(
param.name?.addressableName() ?: param.componentName,
String::class.asTypeName().copy(nullable = !param.required)
) // TODO: Support other types
ParameterSpec.builder(
param.name?.addressableName() ?: param.componentName,
// TODO: Support other types
String::class.asTypeName().copy(nullable = !param.required)
).apply {
if (!param.required) {
defaultValue("null")
}
}.build()
)
}

private fun List<SkribeParameter>.findParameterByName(name: String): SkribeParameterLiteral? =
Expand Down
1 change: 1 addition & 0 deletions codegen/src/main/resources/alpaca-broker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -516,6 +516,7 @@ components:
- DISABLE_PENDING
- ACCOUNT_CLOSED
- PAPER_ONLY
- INACTIVE
description: |
Designates the current status of this account
Expand Down
2 changes: 2 additions & 0 deletions codegen/src/test/resources/alpaca-broker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -516,6 +516,7 @@ components:
- DISABLE_PENDING
- ACCOUNT_CLOSED
- PAPER_ONLY
- INACTIVE
description: |
Designates the current status of this account
Expand Down Expand Up @@ -1352,6 +1353,7 @@ components:
type: object
addidional_information:
type: string
required: false
StreetAddress:
type: string
example: 20 N San Mateo Dr
Expand Down
2 changes: 2 additions & 0 deletions playground/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.6.0")
implementation("io.ktor:ktor-client-core:$ktorVersion")
implementation("io.ktor:ktor-client-cio:$ktorVersion")
implementation("io.ktor:ktor-client-content-negotiation:$ktorVersion")
implementation("io.ktor:ktor-serialization-kotlinx-json:$ktorVersion")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:$kotlinxSerializationVersion")
implementation("com.benasher44:uuid:$uuidVersion")
}
Expand Down
31 changes: 31 additions & 0 deletions playground/src/main/kotlin/Playground.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import io.bkbn.sourdough.clients.model.Account
import io.bkbn.sourdough.clients.request.getAllAccounts
import io.ktor.client.HttpClient
import io.ktor.client.call.body
import io.ktor.client.engine.cio.CIO
import io.ktor.client.plugins.contentnegotiation.ContentNegotiation
import io.ktor.client.plugins.defaultRequest
import io.ktor.client.request.basicAuth
import io.ktor.client.statement.bodyAsText
import io.ktor.serialization.kotlinx.json.json
import kotlinx.serialization.json.Json

suspend fun main() {
val client = HttpClient(CIO) {
defaultRequest {
url("https://broker-api.sandbox.alpaca.markets")
basicAuth("CK8AP1E2F0ZU6LLU3RU9", "HiYV2RSQ7eFVAvrY7TKuZPLlohs2VrUEdelXL2o6")
}
install(ContentNegotiation) {
json(Json {
ignoreUnknownKeys = true
})
}
}

val result = client.getAllAccounts()

println(result.bodyAsText())

println(result.body<List<Account>>())
}

0 comments on commit e7d233d

Please sign in to comment.