System kompilacji obsługuje generowanie interfejsów protobuf poprzez typ modułu rust_protobuf
.
Podstawowe generowanie kodu protobuf odbywa się za pomocą skrzynki rust-protobuf
. Aby wyświetlić dokumentację dotyczącą tego użycia, zobacz stronę projektu GitHub z odpowiednimi przykładami protobuf.
Obsługiwane są także protobufy gRPC, a generowanie zapewnia skrzynka grpc-rs
. Aby wyświetlić dokumentację dotyczącą tego użycia, zapoznaj się z dokumentacją na odpowiedniej stronie projektu gRPC GitHub .
Podstawowe użycie kompilacji rust_protobuf
Poniżej przedstawiono przykład zdefiniowania modułu protobuf i użycia go jako skrzynki. Więcej szczegółów na temat ważnych właściwości i sposobu ich wykorzystania znajduje się w sekcji Definiowanie rust_protobuf
.
Jeśli chcesz użyć kodu wygenerowanego przez protobuf za pośrednictwem makra include!()
, na przykład w przypadku kodu innej firmy, zobacz przykład na stronie generatorów źródeł . (W przykładzie zastosowano moduł rust_bindgen
, ale sposób włączenia źródła jest taki sam dla wszystkich generatorów źródeł.)
Zdefiniuj moduł rust_protobuf Android.bp
Załóżmy, że w src/protos/my.proto
jest trochę proto w stosunku do twojego Android.bp; moduł jest następnie zdefiniowany w następujący sposób:
rust_protobuf {
name: "libmy_proto",
// Crate name that's used to generate the rust_library variants.
crate_name: "my_proto",
// Relative paths to the protobuf source files
protos: ["src/protos/my.proto"],
// If protobufs define gRPCs, then they should go in grpc_protos
// instead.
// grpc_protos: ["src/protos/my.proto"],
// 'source_stem' controls the output filename.
// This is the filename that's used in an include! macro.
source_stem: "my_proto_source",
}
Bibliotekę korzystającą z tej skrzynki definiuje się poprzez odniesienie do niej tak, jakby była to jakakolwiek inna zależność biblioteki:
rust_binary {
name: "hello_rust_proto",
srcs: ["src/main.rs"],
rustlibs: ["libmy_proto"],
}
Struktura skrzyniowa modułów rust_protobuf
Każdy plik protobuf jest zorganizowany jako odrębny moduł w skrzynce, przyjmując nazwę pliku protobuf. Oznacza to, że wszystkie podstawowe nazwy plików proto muszą być unikalne. Weźmy na przykład rust_protobuf
zdefiniowany w następujący sposób:
rust_protobuf {
name: "libfoo",
crate_name: "foo",
protos: ["a.proto", "b.proto"],
grpc_protos: ["c.proto"],
source_stem: "my_proto_source",
}
Dostęp do różnych protosów w tej skrzyni będzie możliwy w następujący sposób:
// use <crate_name>::<proto_filename>
use foo::a; // protobuf interface defined in a.proto
use foo::b; // protobuf interface defined in b.proto
use foo::c; // protobuf interface defined in c.proto
use foo::c_grpc; // grpc interface defined in c.proto
Godne uwagi właściwości rust_protobuf
Właściwości zdefiniowane poniżej stanowią dodatek do ważnych wspólnych właściwości , które mają zastosowanie do wszystkich modułów. Są one albo szczególnie ważne dla modułów Rust protobuf, albo wykazują unikalne zachowanie specyficzne dla typu modułu rust_protobuf
.
łodyga, nazwa, nazwa_skrzynki
rust_protobuf
tworzy warianty bibliotek, więc dla tych trzech właściwości obowiązują takie same wymagania, jak w przypadku modułów rust_library
. Szczegóły znajdziesz we właściwościach rust_library
.
proto
To jest lista względnych ścieżek do plików protobuf służących do wygenerowania interfejsu protobuf. Podstawowe nazwy plików muszą być unikalne dla protos
i grpc_protos
.
grpc_protos
grpc_protos
składa się z listy względnych ścieżek do plików protobuf, które definiują grpcs
do generowania interfejsu protobuf. Podstawowe nazwy plików muszą być unikalne dla protos
i grpc_protos
.
źródło_rdzeń
source_stem
to nazwa wygenerowanego pliku źródłowego , który można dołączyć. Jest to wymagana definicja pola, nawet jeśli używasz powiązań jako skrzynki, ponieważ właściwość stem
kontroluje jedynie nazwę pliku wyjściowego dla wygenerowanych wariantów biblioteki. W przeciwieństwie do innych generatorów źródeł, nazwa pliku jest poprzedzona prefiksem mod_ , tworząc ostateczną nazwę pliku mod_<stem> . Zapobiega to kolizjom nazw ze źródłami wygenerowanymi z każdego proto.
Dodatkowo, podobnie jak moduł powiązań bindgen, dostępny jest również pełny zestaw właściwości biblioteki do kontrolowania kompilacji biblioteki, chociaż rzadko trzeba je definiować lub zmieniać.