Yapı sistemi, rust_protobuf
modül türü aracılığıyla protobuf arayüzleri oluşturulmasını destekler.
Temel protobuf kodu üretimi rust-protobuf
sandığı ile gerçekleştirilir. Bu kullanıma ilişkin belgeleri görüntülemek için ilgili protobuf örneklerinin bulunduğu GitHub proje sayfasına bakın.
GRPC protobuf'ları da grpc-rs
kasası tarafından sağlanan üretimle desteklenir. Bu kullanıma ilişkin belgeleri görüntülemek için ilgili gRPC GitHub proje sayfasındaki belgelere bakın.
Temel Rust_protobuf yapı kullanımı
Aşağıda bir protobuf modülünün tanımlanmasına ve bu modülün kasa olarak kullanılmasına ilişkin bir örnek verilmektedir. Önemli özellikler ve bunların nasıl kullanıldığı hakkında daha fazla ayrıntıyı bir rust_protobuf
Tanımlama bölümünde bulabilirsiniz.
Üçüncü taraf kodu gibi bir include!()
makrosu aracılığıyla protobuf tarafından oluşturulan kodu kullanmanız gerekiyorsa, örnek için Kaynak Oluşturucular sayfasına bakın. (Örnek bir rust_bindgen
modülünü kullanır, ancak kaynak dahil etme yöntemi tüm kaynak oluşturucular için aynıdır.)
Rust_protobuf Android.bp modülünü tanımlayın
Android.bp'nize göre src/protos/my.proto
adresinde bazı protokoller olduğunu varsayalım; modül daha sonra 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 sandığı kullanan bir kütüphane, sanki başka bir kütüphane bağımlılığıymış gibi ona referans verilerek tanımlanır:
rust_binary {
name: "hello_rust_proto",
srcs: ["src/main.rs"],
rustlibs: ["libmy_proto"],
}
Rust_protobuf modüllerinin sandık yapısı
Her protobuf dosyası, protobuf dosyasının adını alarak sandık içinde kendi modülü olarak düzenlenir. Bu, tüm protokol temel dosya adlarının benzersiz olması gerektiği anlamına gelir. Örneğin, aşağıdaki gibi tanımlanan bir rust_protobuf
alın:
rust_protobuf {
name: "libfoo",
crate_name: "foo",
protos: ["a.proto", "b.proto"],
grpc_protos: ["c.proto"],
source_stem: "my_proto_source",
}
Bu sandıktaki farklı protolara şu şekilde erişilecektir:
// 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
Dikkate değer 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 ya Rust protobuf modülleri için özellikle önemlidir ya da rust_protobuf
modül tipine özgü benzersiz davranışlar sergiler.
kök, ad, sandık_adı
rust_protobuf
kitaplık varyantları üretir, dolayısıyla bu üç özellik için de, rust_library
modülleri için geçerli olan aynı gereksinimler mevcuttur. Ayrıntılar için rust_library
özelliklerine bakın.
protolar
Bu, protobuf arayüzünü oluşturmak için protobuf dosyalarına giden göreceli yolların bir listesidir. Temel dosya adları protos
ve grpc_protos
genelinde benzersiz olmalıdır.
grpc_protos
grpc_protos
protobuf arayüzünü oluşturmak için grpcs
tanımlayan protobuf dosyalarına giden göreceli yolların bir listesinden oluşur. Temel dosya adları protos
ve grpc_protos
genelinde benzersiz olmalıdır.
kaynak_stem
source_stem
oluşturulan kaynak dosyanın dahil edilebilecek dosya adıdır. Bağlamaları bir kasa olarak kullanıyor olsanız bile bu gerekli bir alan tanımıdır, çünkü stem
özelliği yalnızca oluşturulan kitaplık varyantları için çıktı dosya adını kontrol eder. Diğer kaynak oluşturucuların aksine, dosya adının önüne mod_ eklenir ve son dosya adı mod_<stem> olur. Bu, her protokolden oluşturulan kaynaklarla ad çakışmalarını önler.
Ek olarak, bağlama bağlamaları modülü gibi, kitaplık derlemesini kontrol etmek için kitaplık özelliklerinin tam seti de mevcuttur, ancak bunların nadiren tanımlanması veya değiştirilmesi gerekir.