Protobuf modülleri

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 sandığıyla gerçekleştirilir. Bu kullanım hakkında dokümanları görüntülemek için ilgili protobuf örneklerinin yer aldığı GitHub proje sayfasına bakın.

gRPC protobuf'ları da desteklenir. Oluşturma işlemi grpc-rs sandığı tarafından sağlanır. Bu kullanımla ilgili dokümanları görüntülemek için ilgili gRPC GitHub proje sayfasındaki dokümanlara bakın.

Temel rust_protobuf derleme kullanımı

Aşağıda, bir protobuf modülünü tanımlama ve bu modülü bir paket olarak kullanma örneği verilmiştir. Önemli özellikler ve nasıl kullanıldıkları hakkında daha fazla bilgiyi rust_protobuf tanımlama bölümünde bulabilirsiniz.

Üçüncü taraf kodu gibi durumlarda include!() makrosu aracılığıyla oluşturulan protobuf kodunu kullanmanız gerekiyorsa örnek için Kaynak Oluşturucular sayfasına bakın. (Örnekte rust_bindgen modülü kullanılmaktadır ancak kaynak ekleme yöntemi tüm kaynak oluşturucular için aynıdır.)

Android.bp modülünü rust_protobuf olarak tanımlama

Android.bp'nize göre src/protos/my.proto konumunda bazı proto'ların olduğunu varsayalım. Modül şu şekilde 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 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 sandık yapısı

Her protobuf dosyası, crate içinde kendi modülü olarak düzenlenir ve protobuf dosyasının adını alır. Bu nedenle, tüm proto temel dosya adları benzersiz olmalıdır. Örneğin, aşağıdaki gibi tanımlanmış bir rust_protobuf değerini ele 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ı proto'lara aşağıdaki gibi 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 türüne özgü benzersiz davranışlar sergiler.rust_protobuf

stem, name, crate_name

rust_protobuf, kitaplık varyantları oluşturur. Bu nedenle, bu üç özellik için rust_protobuf modüllerinde olduğu gibi aynı koşullar geçerlidir.rust_library 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 genelinde benzersiz olmalıdır.

grpc_protos

grpc_protos, protobuf arayüzünü oluşturmak için grpcs tanımlayan protobuf dosyalarının göreli yollarının listesinden oluşur. Temel dosya adları, protos ve grpc_protos genelinde benzersiz olmalıdır.

source_stem

source_stem, eklenebilecek oluşturulan kaynak dosyanın dosya adıdır. Bağlamaları bir sandık olarak kullanıyor olsanız bile bu alan tanımı zorunludur. Bunun nedeni, stem özelliğinin yalnızca oluşturulan kitaplık varyantlarının çıkış dosya adını kontrol etmesidir. Diğer kaynak oluşturucuların aksine, dosya adının önüne mod_ ön eki eklenir ve nihai dosya adı mod_<stem> olur. Bu, her proto'dan oluşturulan kaynaklarla ad çakışmalarını önler.

Ayrıca, bindgen bağlama modülünde olduğu gibi, kitaplık derlemesini kontrol etmek için kitaplık özelliklerinin tamamı da kullanılabilir. Ancak bunların tanımlanması veya değiştirilmesi nadiren gerekir.