Protobuf til Kotlin-konverter
Indsæt et .proto-skema. Få Kotlin data classes med korrekte typer, camelCase-felter og defaultværdier.
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: string → String, bool → Boolean, bytes → ByteArray, int32/sint32/fixed32 → Int, int64/sint64/fixed64 → Long, double → Double, float → Float. 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_id → orderId) — 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.
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.
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.
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_case → camelCase 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: