Derleme sistemi, rust_protobuf
modülü türü aracılığıyla protobuf arayüzleri oluşturmayı destekler.
Temel protobuf kodu oluşturma işlemi rust-protobuf
paketi ile gerçekleştirilir.
Bu kullanımla ilgili dokümanları görüntülemek için ilgili protobuf örneklerinin bulunduğu GitHub proje sayfasına bakın.
grpc-rs
paketi tarafından sağlanan oluşturma işlemiyle gRPC protobuf'leri de desteklenir.
Bu kullanımla ilgili dokümanları görüntülemek için ilgili gRPC GitHub proje sayfasını inceleyin.
Temel rust_protobuf derleme kullanımı
Aşağıda, bir protobuf modülünün tanımlanması ve bu modülün kutu olarak kullanılmasına dair bir örnek verilmiştir. Önemli mülkler ve bunların nasıl kullanıldığı hakkında daha fazla bilgiyi rust_protobuf
tanımlama bölümünde bulabilirsiniz.
Üçüncü taraf kodu gibi include!()
makrosu aracılığıyla oluşturulmuş protobuf kodu kullanmanız gerekiyorsa örnek için Kaynak Oluşturucular sayfasına bakın. (Örnekte bir rust_bindgen
modülü kullanılmış olsa da kaynak ekleme yöntemi tüm kaynak oluşturucular için aynıdır.)
rust_protobuf Android.bp modülü tanımlama
Android.bp dosyanıza göre src/protos/my.proto
adresinde bir proto olduğunu varsayalım. Bu durumda modül aşağıdaki gibi tanımlanır:
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",
}
Bu paketi kullanan bir kitaplık, diğer kitaplık bağımlılıkları gibi referans verilerek tanımlanır:
rust_binary {
name: "hello_rust_proto",
srcs: ["src/main.rs"],
rustlibs: ["libmy_proto"],
}
rust_protobuf modüllerinin kutu yapısı
Her protobuf dosyası, protobuf dosyasının adını alarak paket içinde kendi modülü olarak düzenlenir. Bu nedenle, tüm proto temel dosya adları benzersiz olmalıdır. Örneğin, aşağıdaki gibi tanımlanmış bir rust_protobuf
alalım:
rust_protobuf {
name: "libfoo",
crate_name: "foo",
protos: ["a.proto", "b.proto"],
grpc_protos: ["c.proto"],
source_stem: "my_proto_source",
}
Bu paketteki farklı protolara aşağıdaki şekilde erişilir:
// 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
Önemli rust_protobuf özellikleri
Aşağıda tanımlanan özellikler, tüm modüller için geçerli olan önemli ortak özelliklere ek olarak verilmiştir. Bunlar, Rust protobuf modülleri için özellikle önemlidir veya modül rust_protobuf
türüne özgü benzersiz bir davranış sergiler.
stem, name, crate_name
rust_protobuf
, kitaplık varyantları üretir. Bu nedenle, bu üç özellik için rust_library
modülleri ile aynı koşullar geçerlidir. Ayrıntılar için rust_library
özelliklerine bakın.
protos
Bu, protobuf arayüzünü oluşturmak için protobuf dosyalarının göreli yollarının listesidir. Temel dosya adları, protos
ve grpc_protos
arasında benzersiz olmalıdır.
grpc_protos
grpc_protos
, protobuf arayüzünü oluşturmak için grpcs
değerini tanımlayan protobuf dosyalarının göreli yollarının bir listesinden oluşur. Temel dosya adları, protos
ve grpc_protos
arasında benzersiz olmalıdır.
source_stem
source_stem
, dahil edilebilecek oluşturulan kaynak dosyanın adıdır.
stem
mülkü yalnızca oluşturulan kitaplık varyantlarının çıkış dosya adını kontrol ettiğinden, bağlamaları kutu olarak kullanıyor olsanız bile bu zorunlu bir alan tanımıdır. Diğer kaynak oluşturucuların aksine, dosya adına mod_ ön ekiyle başlanır. Böylece nihai dosya adı mod_<kök> olur. Bu, her protodan oluşturulan kaynaklarla ad çakışmasını önler.
Ayrıca, bindgen bağlama modülü gibi kitaplık derlemesini kontrol etmek için kitaplık özelliklerinin tamamı da kullanılabilir. Ancak bu özelliklerin nadiren tanımlanması veya değiştirilmesi gerekir.