Konwerter Protobuf do Kotlin
Wklej schemat .proto. Otrzymaj data classy Kotlin z poprawnymi typami, polami w camelCase i wartościami domyślnymi.
Wejście (schemat .proto)
Wyjście (Kotlin)
Co robi to narzędzie
Masz schemat Protocol Buffers — może od zespołu backendowego, może z kontraktu API zewnętrznego dostawcy — i kod w Kotlinie, który potrzebuje pasujących typowanych form. Albo aplikacja Androida wołająca backend gRPC, albo Kotlin po stronie serwera parsujący wiadomości Protobuf zakodowane w JSON. Stawianie pełnego pipeline’u codegen grpc-kotlin to przerost formy, jeśli potrzebujesz tylko kształtów data class — wklej, skopiuj, wrzuć.
Mapowanie typów trzyma się idiomów Kotlina: string → String, bool → Boolean, bytes → ByteArray, int32/sint32/fixed32 → Int, int64/sint64/fixed64 → Long, double → Double, float → Float. repeated T staje się List<T> z domyślnym emptyList(); map<K, V> staje się Map<K, V> z domyślnym emptyMap(). Pojedyncze pola zagnieżdżonych wiadomości są nullowalne (?) z domyślnym null — pasuje do semantyki has-value w proto3.
Nazwy pól są konwertowane z snake_case w proto na camelCase w Kotlinie (order_id → orderId) — standardowa konwencja kodowania Kotlina według oficjalnego stylu Kotlin. Nazwy klas i enumów pozostają w PascalCase. Każdy enum staje się enum class z polem Int w tle. Konwersja działa w całości w twojej przeglądarce — twój .proto nigdy nie opuszcza strony.
Jak tego użyć
Trzy kroki. Wynik to Kotlin gotowy do wklejenia.
Wklej swój schemat .proto
Wrzuć schemat do edytora po lewej. syntax = "proto3"; u góry jest ok, ale opcjonalne. Zagnieżdżone bloki message, deklaracje enum, oneof, map<K, V> i opcje pól — wszystko jest obsłużone.
Konwencje kodowania Kotlina preferują camelCase dla właściwości — konwerter robi to za ciebie. Jeśli wolisz oryginalne nazwy w snake_case (niektóre biblioteki serializacji wymagają zgodności nazw 1:1), użyj znajdź-zamień na wyjściu.
Przeczytaj wynik w Kotlinie
Po prawej: każda wiadomość staje się data class z domyślnymi wartościami dla każdej właściwości. Każdy enum staje się enum class(val value: Int), dzięki czemu możesz wykonać round-trip formatu wire. Tylko poziom korzenia (bez zagnieżdżeń) — łatwo wrzucić do jednego pliku albo rozbić.
Podłącz do projektu
Wrzuć plik do projektu, dodaj deklarację package i zaimportuj. Do prawdziwego kodu gRPC na Androidzie lub JVM nadal będziesz chciał uruchomić codegen grpc-kotlin, by mieć metody marshal i stuby. To wyjście służy do typowanej obsługi JSON, szkiców struktur i przeglądów.
Kiedy to naprawdę oszczędza czas
Szkicowanie typów dla Androida z .proto backendu
Twoja aplikacja Androida rozmawia z backendem gRPC. .proto należy do zespołu backendu. Chcesz kształtów data class, by otypować view modele bez stawiania jeszcze codegen. Wklej, wrzuć do Models.kt, masz typy.
Kotlin po stronie serwera parsujący Protobuf zakodowany w JSON
Twój Kotlin po stronie serwera (Ktor / Spring Boot) konsumuje JSON zgodny z kodowaniem JSON proto3. Potrzebujesz pasujących data class. Wklej .proto, skopiuj wynik Kotlin, podłącz do wybranego serializatora.
Przegląd zmiany API Protobuf
Kolega z zespołu dodał pola do wiadomości. Wklej nowe .proto, zrób diff wyniku Kotlin z bieżącym Models.kt, zostaw skupioną review bez stawiania całego toolchaina.
Jednorazowe skrypty i szybkie prototypy
Pięćdziesięciolinijkowy skrypt Kotlin uderzający w gRPC-gateway. Stawianie grpc-kotlin i protoc tylko po to to przesada. Wygeneruj data classy tutaj i wrzuć je tam.
Najczęstsze pytania
Czy to zastępuje protoc-gen-kotlin?
Nie. Prawdziwy codegen produkuje metody marshal/unmarshal, deskryptory i stuby gRPC. To narzędzie generuje tylko kształty data class. Do produkcyjnego kodu gRPC uruchom grpc-kotlin. Tego używaj do szkiców, parsowania JSON, przeglądów i jednorazowych skryptów.
Dlaczego pojedyncze pola wiadomości są nullowalne?
W proto3 pola typu wiadomość mają semantykę "has value" — mogą być nieustawione. Najczystszy odpowiednik w Kotlinie to nullowalna właściwość z domyślnym null. Jeśli wiesz, że twoje dane zawsze wypełniają te pola, usuń ? i domyślną wartość — proste znajdź-zamień.
Jak są obsługiwane uint32 i uint64?
Oba mapują się na typy ze znakiem (Int i Long). Kotlin ma stabilne typy UInt i ULong od wersji 1.5, ale typy ze znakiem są bardziej kompatybilne z istniejącymi bibliotekami serializacji i większością kodów na Androida. Jeśli koniecznie potrzebujesz wariantów bez znaku, podmień je w wyjściu.
Jak generowane są enumy?
Każdy staje się enum class WithValue(val value: Int), byś mógł zachować liczbę z formatu wire. Każda wartość dostaje oryginalną nazwę z proto (np. ORDER_STATUS_PENDING) — wpisy enumów w Kotlinie i tak są umownie w SCREAMING_SNAKE_CASE, więc się zgadza.
Jak konwertowane są nazwy pól?
snake_case → camelCase zgodnie z konwencjami kodowania Kotlin. order_id staje się orderId, customer_name staje się customerName. Nazwy klas i enumów pozostają w PascalCase tak jak w proto.
Czy obsługuje zagnieżdżone wiadomości?
Tak — zagnieżdżone bloki message są w wyjściu spłaszczane do deklaracji data class na poziomie korzenia. Plik pozostaje czytelny i łatwy do podzielenia na wiele plików. Jeśli wolisz zagnieżdżone klasy Kotlina, opakuj je ręcznie.
Powiązane narzędzia
Jeśli pracujesz z Protobuf i Kotlinem, te dobrze ze sobą współgrają: