Protobuf modülleri

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.