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 paketi ile gerçekleştirilir. Bu kullanımla ilgili belgeleri görüntülemek için ilgili protobuf örneklerini içeren GitHub proje sayfasına bakın.

Oluşturma işlemi grpc-rs kasası tarafından sağlanan gRPC protobuf'ları da 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 paket 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 şekilde tanımlanan bir rust_protobuf örneğini alın:

rust_protobuf {
    name: "libfoo",
    crate_name: "foo",
    protos: ["a.proto", "b.proto"],
    grpc_protos: ["c.proto"],
    source_stem: "my_proto_source",
}

Bu kasa içindeki farklı protolara aşağıdaki şekilde erişilebilir:

// 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 ektir. Bunlar, Rust protobuf modülleri için özellikle önemlidir veya modül rust_protobuftürüne özgü benzersiz bir davranış sergiler.

kök, ad, sandık_adı

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ına giden göreli yolların listesidir. Temel dosya adları protos ve grpc_protos arasında benzersiz olmalıdır.

grpc_proto'ları

grpc_protos, protobuf arayüzünü oluşturmak için grpcs'yi 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.

kaynak_kök

source_stem, dahil edilebilecek oluşturulan kaynak dosyanın dosya 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şturuculardan farklı olarak dosya adı, mod_ tarafından öne çıkarılır. Bu şekilde nihai dosya adı mod_<stem> olur. Bu, her bir protokolden oluşturulan kaynaklarla çakışmaları ö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.