mô-đun protobuf

Hệ thống xây dựng hỗ trợ tạo giao diện protobuf thông qua loại mô-đun rust_protobuf .

Việc tạo mã protobuf cơ bản được thực hiện với thùng rust-protobuf . Để xem tài liệu về cách sử dụng này, hãy xem trang dự án GitHub với các ví dụ về protobuf tương ứng.

Các protobuf gRPC cũng được hỗ trợ, với việc tạo được cung cấp bởi thùng grpc-rs . Để xem tài liệu về cách sử dụng này, hãy xem tài liệu trên trang dự án gRPC GitHub tương ứng.

Cách sử dụng bản dựng Rust_protobuf cơ bản

Phần sau đây cung cấp ví dụ về cách xác định mô-đun protobuf và sử dụng mô-đun đó làm thùng. Thông tin chi tiết hơn về các thuộc tính quan trọng và cách chúng được sử dụng có trong phần Xác định rust_protobuf .

Nếu bạn cần sử dụng mã được tạo bởi protobuf thông qua macro include!() , chẳng hạn như đối với mã của bên thứ ba, hãy xem trang Trình tạo nguồn để biết ví dụ. (Ví dụ sử dụng mô-đun rust_bindgen , nhưng phương tiện đưa nguồn vào là giống nhau đối với tất cả các trình tạo nguồn.)

Xác định mô-đun Rust_protobuf Android.bp

Giả sử một số proto tại src/protos/my.proto liên quan đến Android.bp của bạn; mô-đun sau đó được định nghĩa như sau:

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",
}

Một thư viện sử dụng thùng này được xác định bằng cách tham chiếu nó như thể nó là bất kỳ phần phụ thuộc thư viện nào khác:

rust_binary {
    name: "hello_rust_proto",
    srcs: ["src/main.rs"],
    rustlibs: ["libmy_proto"],
}

Cấu trúc thùng của module Rust_protobuf

Mỗi tệp protobuf được tổ chức dưới dạng mô-đun riêng trong thùng, lấy tên của tệp protobuf. Điều này có nghĩa là tất cả tên tệp cơ sở nguyên mẫu phải là duy nhất. Ví dụ: lấy một rust_protobuf được xác định như sau:

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

Các proto khác nhau trong thùng này sẽ được truy cập như sau:

// 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

Thuộc tính Rust_protobuf đáng chú ý

Các thuộc tính được xác định bên dưới là phần bổ sung cho các thuộc tính chung quan trọng áp dụng cho tất cả các mô-đun. Đây là những điều đặc biệt quan trọng đối với các mô-đun Rust protobuf hoặc thể hiện hành vi độc đáo dành riêng cho loại mô-đun rust_protobuf .

thân, tên, thùng_name

rust_protobuf tạo ra các biến thể thư viện, do đó, các yêu cầu tương tự tồn tại đối với ba thuộc tính này giống như đối với các mô-đun rust_library . Xem thuộc tính rust_library để biết chi tiết.

nguyên mẫu

Đây là danh sách các đường dẫn tương đối đến các tệp protobuf để tạo giao diện protobuf. Tên tệp cơ sở phải là duy nhất trên protosgrpc_protos .

grpc_protos

grpc_protos bao gồm một danh sách các đường dẫn tương đối đến các tệp protobuf xác định grpcs để tạo giao diện protobuf. Tên tệp cơ sở phải là duy nhất trên protosgrpc_protos .

nguồn_stem

source_stem là tên tệp của tệp nguồn được tạo có thể được đưa vào. Đây là định nghĩa trường bắt buộc, ngay cả khi bạn đang sử dụng các liên kết làm thùng, vì thuộc tính stem chỉ kiểm soát tên tệp đầu ra cho các biến thể thư viện được tạo. Không giống như các trình tạo nguồn khác, tên tệp có tiền tố mod_ , tạo thành tên tệp cuối cùng mod_<stem> . Điều này ngăn ngừa xung đột tên với các nguồn được tạo từ mỗi proto.

Ngoài ra, giống như mô-đun liên kết bindgen, tập hợp đầy đủ các thuộc tính thư viện cũng có sẵn để kiểm soát quá trình biên dịch thư viện, mặc dù những thuộc tính này hiếm khi cần được xác định hoặc thay đổi.