Input (.proto-skema)

Output (Kotlin)

Hvad værktøjet gør

Du har et Protocol Buffers-skema — måske fra backend-teamet, måske fra en tredjeparts API-kontrakt — og en Kotlin-kodebase, der har brug for typede former til det. Enten en Android-app, der kalder en gRPC-backend, eller server-side Kotlin, der parser JSON-kodede Protobuf-beskeder. At sætte hele grpc-kotlin-codegen-pipelinen op er overkill, hvis du kun har brug for data class-formerne — indsæt, kopiér, smid ind.

Type-mappingen følger Kotlin-idiomer: stringString, boolBoolean, bytesByteArray, int32/sint32/fixed32Int, int64/sint64/fixed64Long, doubleDouble, floatFloat. repeated T bliver til List<T> med default emptyList(); map<K, V> bliver til Map<K, V> med default emptyMap(). Enkelt-beskedfelter er nullable (?) med default null — passer med proto3’s has-value-semantik.

Feltnavne konverteres fra snake_case i proto til camelCase i Kotlin (order_idorderId) — den standard Kotlin-kodekonvention ifølge officiel Kotlin-stil. Klasse- og enum-navne forbliver PascalCase. Hver enum bliver til en enum class med en Int-backingværdi. Konverteringen kører fuldt ud i din browser — din .proto forlader aldrig siden.

Sådan bruger du det

Tre trin. Outputtet er Kotlin, der er klar til at sætte ind.

1

Indsæt dit .proto-skema

Smid skemaet ind i editoren til venstre. syntax = "proto3"; i toppen er fint, men valgfrit. Indlejrede message-blokke, enum-deklarationer, oneof, map<K, V> og feltoptioner håndteres alle.

Kotlin-kodekonventionerne foretrækker camelCase til properties — konverteren gør det for dig. Foretrækker du de oprindelige snake_case-navne (nogle serialiseringsbiblioteker kræver eksakt match på feltnavne), så lav søg-og-erstat på outputtet.

2

Læs Kotlin-outputtet

Til højre: hver besked bliver til en data class med defaultværdier for hver property. Hver enum bliver til en enum class(val value: Int), så du kan round-trippe wire-formatet. Kun på rodniveau (ingen indlejring) — let at smide i én fil eller dele op.

3

Hægt det på dit projekt

Smid filen ind i dit projekt, tilføj en package-deklaration og importér. Til ægte gRPC-kode på Android eller JVM vil du stadig gerne køre grpc-kotlin-codegen for at få marshal-metoderne og stubsene. Dette output er til typet JSON-håndtering, struct-skitser og reviews.

Hvornår det reelt sparer tid

Skitsér Android-typer fra en backend-.proto

Din Android-app taler med en gRPC-backend. Backend-teamet ejer .proto-filen. Du vil have data class-formerne for at type dine view models uden at sætte codegen op endnu. Indsæt, smid i Models.kt, så er du typet.

Server-side Kotlin parser JSON-kodet Protobuf

Din server-side Kotlin (Ktor / Spring Boot) tager imod JSON, der følger proto3 JSON-kodningen. Du har brug for data classes, der matcher. Indsæt .proto:en, kopiér Kotlin-outputtet og kobl det på den serializer, du foretrækker.

Reviewe en Protobuf-API-ændring

En kollega har tilføjet felter til en besked. Indsæt den nye .proto, diff Kotlin-outputtet mod din nuværende Models.kt, og giv en fokuseret review uden at fyre hele toolchainen op.

Engangsskripts og hurtige prototyper

Et 50-liniers Kotlin-script, der slår på en gRPC-gateway. At sætte grpc-kotlin og protoc op alene for det er overkill. Generér data classerne her og smid dem ind.

Almindelige spørgsmål

Er dette en erstatning for protoc-gen-kotlin?

Nej. Rigtig codegen producerer marshal/unmarshal-metoder, descriptors og gRPC-stubs. Dette værktøj udsender kun data class-formerne. Kør grpc-kotlin til produktions-gRPC-kode. Brug dette til skitser, JSON-parsing, reviews og engangsskripts.

Hvorfor er enkelt-beskedfelter nullable?

I proto3 har beskedfelter en "has value"-semantik — de kan være usatte. Det reneste Kotlin-modstykke er en nullable property med default null. Hvis du ved, at dine data altid udfylder disse felter, fjerner du ?:et og defaultværdien — direkte søg-og-erstat.

Hvordan håndteres uint32 og uint64?

Begge mapper til signed-typer (Int og Long). Kotlin har stabile UInt- og ULong-typer siden 1.5, men signed-typer er mere kompatible med eksisterende serialiseringsbiblioteker og de fleste Android-kodebaser. Har du specifikt brug for de unsigned-varianter, så byt dem ind i outputtet.

Hvordan udsendes enums?

Hver enum bliver til en enum class WithValue(val value: Int), så du kan bevare wire-formatets heltal. Hver værdi får det oprindelige proto-navn (fx ORDER_STATUS_PENDING) — Kotlin enum-indgange er pr. konvention allerede SCREAMING_SNAKE_CASE, så det passer.

Hvordan konverteres feltnavne?

snake_casecamelCase ifølge Kotlin-kodekonventionerne. order_id bliver til orderId, customer_name bliver til customerName. Klasse- og enum-navne forbliver i PascalCase som i proto.

Håndterer den indlejrede beskeder?

Ja — indlejrede message-blokke fladtrykkes i outputtet til data class-deklarationer på rodniveau. Det holder filen let at læse og let at splitte over flere filer. Foretrækker du Kotlins indlejrede klasser, så pak dem ind i hånden.

Relaterede værktøjer

Arbejder du med Protobuf og Kotlin, passer disse fint sammen: