Skip to content

Commit ae18333

Browse files
committed
Added support for Well-Known Types
1 parent 2130297 commit ae18333

File tree

41 files changed

+5365
-1372
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+5365
-1372
lines changed

gradle-plugin/src/main/kotlin/kotlinx/rpc/buf/tasks/BufGenerateTask.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ public abstract class BufGenerateTask : BufExecTask() {
5656
/**
5757
* Whether to include Well-Known Types.
5858
*
59+
* Automatically sets [includeImports] to `true`.
60+
*
5961
* @see <a href="https://buf.build/docs/reference/cli/buf/generate/#include-wkt">buf generate --include-wkt</a>
6062
* @see [BufGenerateExtension.includeWkt]
6163
*/
@@ -91,7 +93,7 @@ public abstract class BufGenerateTask : BufExecTask() {
9193
buildList {
9294
add("--output"); add(outputDirectory.get().absolutePath)
9395

94-
if (includeImports.get()) {
96+
if (includeImports.get() || includeWkt.get()) {
9597
add("--include-imports")
9698
}
9799

gradle-plugin/src/main/kotlin/kotlinx/rpc/internal/configureLocalProtocGenDevelopmentDependency.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@ import org.gradle.kotlin.dsl.provideDelegate
1414
import org.gradle.kotlin.dsl.withType
1515

1616
@InternalRpcApi
17-
public fun Project.configureLocalProtocGenDevelopmentDependency() {
17+
public fun Project.configureLocalProtocGenDevelopmentDependency(
18+
vararg sourceSetSuffix: String = arrayOf("Test"),
19+
) {
1820
val globalRootDir: String by extra
1921

2022
rpcExtension().protoc.plugins {
@@ -32,7 +34,7 @@ public fun Project.configureLocalProtocGenDevelopmentDependency() {
3234
}
3335

3436
tasks.withType<BufGenerateTask>().configureEach {
35-
if (name.endsWith("Test")) {
37+
if (sourceSetSuffix.any { name.endsWith(it) }) {
3638
val includedBuild = gradle.includedBuild("protoc-gen")
3739
dependsOn(includedBuild.task(":grpc:jar"))
3840
dependsOn(includedBuild.task(":protobuf:jar"))

protobuf/protobuf-core/build.gradle.kts

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
@file:OptIn(InternalRpcApi::class)
66

7+
import org.jetbrains.kotlin.gradle.dsl.KotlinVersion
8+
import kotlinx.rpc.buf.tasks.BufGenerateTask
79
import kotlinx.rpc.internal.InternalRpcApi
810
import kotlinx.rpc.internal.configureLocalProtocGenDevelopmentDependency
911
import util.configureCLibCInterop
@@ -14,19 +16,23 @@ plugins {
1416
}
1517

1618
kotlin {
19+
compilerOptions {
20+
apiVersion = KotlinVersion.KOTLIN_2_1
21+
}
22+
1723
sourceSets {
1824
commonMain {
1925
dependencies {
2026
api(projects.utils)
2127
api(projects.protobuf.protobufInputStream)
28+
api(projects.grpc.grpcCodec)
29+
2230
api(libs.kotlinx.io.core)
2331
}
2432
}
2533

2634
commonTest {
2735
dependencies {
28-
implementation(projects.grpc.grpcCodec)
29-
3036
implementation(libs.kotlin.test)
3137
implementation(libs.coroutines.test)
3238
}
@@ -66,4 +72,17 @@ protoSourceSets {
6672
}
6773
}
6874

69-
configureLocalProtocGenDevelopmentDependency()
75+
configureLocalProtocGenDevelopmentDependency("Main", "Test")
76+
77+
val generatedCodeDir = layout.projectDirectory
78+
.dir("src")
79+
.dir("commonMain")
80+
.dir("generated-code")
81+
.asFile
82+
83+
tasks.withType<BufGenerateTask>().configureEach {
84+
if (name.contains("Main")) {
85+
includeWkt = true
86+
outputDirectory = generatedCodeDir
87+
}
88+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
@file:OptIn(ExperimentalRpcApi::class, InternalRpcApi::class)
2+
package com.google.protobuf.kotlin
3+
4+
import kotlinx.rpc.internal.utils.*
5+
6+
@kotlinx.rpc.grpc.codec.WithCodec(com.google.protobuf.kotlin.AnyInternal.CODEC::class)
7+
public interface Any {
8+
public val typeUrl: String
9+
public val value: ByteArray
10+
11+
public companion object
12+
}
13+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
@file:OptIn(ExperimentalRpcApi::class, InternalRpcApi::class)
2+
package com.google.protobuf.kotlin
3+
4+
import kotlinx.rpc.internal.utils.*
5+
6+
@kotlinx.rpc.grpc.codec.WithCodec(com.google.protobuf.kotlin.ApiInternal.CODEC::class)
7+
public interface Api {
8+
public val name: String
9+
public val methods: List<com.google.protobuf.kotlin.Method>
10+
public val options: List<com.google.protobuf.kotlin.Option>
11+
public val version: String
12+
public val sourceContext: com.google.protobuf.kotlin.SourceContext
13+
public val mixins: List<com.google.protobuf.kotlin.Mixin>
14+
public val syntax: com.google.protobuf.kotlin.Syntax
15+
16+
public companion object
17+
}
18+
19+
@kotlinx.rpc.grpc.codec.WithCodec(com.google.protobuf.kotlin.MethodInternal.CODEC::class)
20+
public interface Method {
21+
public val name: String
22+
public val requestTypeUrl: String
23+
public val requestStreaming: Boolean
24+
public val responseTypeUrl: String
25+
public val responseStreaming: Boolean
26+
public val options: List<com.google.protobuf.kotlin.Option>
27+
public val syntax: com.google.protobuf.kotlin.Syntax
28+
29+
public companion object
30+
}
31+
32+
@kotlinx.rpc.grpc.codec.WithCodec(com.google.protobuf.kotlin.MixinInternal.CODEC::class)
33+
public interface Mixin {
34+
public val name: String
35+
public val root: String
36+
37+
public companion object
38+
}
39+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
@file:OptIn(ExperimentalRpcApi::class, InternalRpcApi::class)
2+
package com.google.protobuf.kotlin
3+
4+
import kotlinx.rpc.internal.utils.*
5+
6+
@kotlinx.rpc.grpc.codec.WithCodec(com.google.protobuf.kotlin.DurationInternal.CODEC::class)
7+
public interface Duration {
8+
public val seconds: Long
9+
public val nanos: Int
10+
11+
public companion object
12+
}
13+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
@file:OptIn(ExperimentalRpcApi::class, InternalRpcApi::class)
2+
package com.google.protobuf.kotlin
3+
4+
import kotlinx.rpc.internal.utils.*
5+
6+
@kotlinx.rpc.grpc.codec.WithCodec(com.google.protobuf.kotlin.EmptyInternal.CODEC::class)
7+
public interface Empty {
8+
public companion object
9+
}
10+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
@file:OptIn(ExperimentalRpcApi::class, InternalRpcApi::class)
2+
package com.google.protobuf.kotlin
3+
4+
import kotlinx.rpc.internal.utils.*
5+
6+
@kotlinx.rpc.grpc.codec.WithCodec(com.google.protobuf.kotlin.FieldMaskInternal.CODEC::class)
7+
public interface FieldMask {
8+
public val paths: List<kotlin.String>
9+
10+
public companion object
11+
}
12+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
@file:OptIn(ExperimentalRpcApi::class, InternalRpcApi::class)
2+
package com.google.protobuf.kotlin
3+
4+
import kotlinx.rpc.internal.utils.*
5+
6+
@kotlinx.rpc.grpc.codec.WithCodec(com.google.protobuf.kotlin.SourceContextInternal.CODEC::class)
7+
public interface SourceContext {
8+
public val fileName: String
9+
10+
public companion object
11+
}
12+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
@file:OptIn(ExperimentalRpcApi::class, InternalRpcApi::class)
2+
package com.google.protobuf.kotlin
3+
4+
import kotlin.jvm.JvmInline
5+
import kotlinx.rpc.internal.utils.*
6+
7+
@kotlinx.rpc.grpc.codec.WithCodec(com.google.protobuf.kotlin.StructInternal.CODEC::class)
8+
public interface Struct {
9+
public val fields: Map<kotlin.String, com.google.protobuf.kotlin.Value>
10+
11+
public companion object
12+
}
13+
14+
@kotlinx.rpc.grpc.codec.WithCodec(com.google.protobuf.kotlin.ValueInternal.CODEC::class)
15+
public interface Value {
16+
public val kind: com.google.protobuf.kotlin.Value.Kind?
17+
18+
public sealed interface Kind {
19+
@JvmInline
20+
public value class NullValue(
21+
public val value: com.google.protobuf.kotlin.NullValue,
22+
): Kind
23+
24+
@JvmInline
25+
public value class NumberValue(public val value: Double): Kind
26+
27+
@JvmInline
28+
public value class StringValue(public val value: String): Kind
29+
30+
@JvmInline
31+
public value class BoolValue(public val value: Boolean): Kind
32+
33+
@JvmInline
34+
public value class StructValue(
35+
public val value: com.google.protobuf.kotlin.Struct,
36+
): Kind
37+
38+
@JvmInline
39+
public value class ListValue(
40+
public val value: com.google.protobuf.kotlin.ListValue,
41+
): Kind
42+
}
43+
44+
public companion object
45+
}
46+
47+
@kotlinx.rpc.grpc.codec.WithCodec(com.google.protobuf.kotlin.ListValueInternal.CODEC::class)
48+
public interface ListValue {
49+
public val values: List<com.google.protobuf.kotlin.Value>
50+
51+
public companion object
52+
}
53+
54+
public sealed class NullValue(public open val number: Int) {
55+
public object NULL_VALUE: NullValue(number = 0)
56+
57+
public data class UNRECOGNIZED(override val number: Int): NullValue(number)
58+
59+
public companion object {
60+
public val entries: List<NullValue> by lazy { listOf(NULL_VALUE) }
61+
}
62+
}
63+

0 commit comments

Comments
 (0)