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.

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

Các protobuf gRPC cũng được hỗ trợ, với quá trình tạo do vùng chứa grpc-rs cung cấp. Để 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 GitHub tương ứng của gRPC.

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

Sau đây là ví dụ về cách xác định mô-đun protobuf và sử dụng mô-đun đó làm hộp. Bạn có thể xem thêm thông tin chi tiết về các thuộc tính quan trọng và cách sử dụng các thuộc tính đó trong phần Xác định rust_protobuf.

Nếu bạn cần sử dụng mã được tạo 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 thức đưa nguồn vào là giống nhau cho tất cả trình tạo nguồn.)

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

Giả sử một số proto tại src/protos/my.proto tương ứng với Android.bp; sau đó, mô-đun được xác định 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",
}

Thư viện sử dụng hòm này được xác định bằng cách tham chiếu đến thư viện đó như thể đó 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 các mô-đun rust_protobuf

Mỗi tệp protobuf được sắp xếp dưới dạng mô-đun riêng trong vùng chứa, 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ở proto phải là duy nhất. Ví dụ: lấy 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",
}

Bạn có thể truy cập vào các proto khác nhau trong vùng chứa này 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

Các thuộc tính rust_protobuf đáng chú ý

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

stem, name, crate_name

rust_protobuf tạo các biến thể thư viện, vì vậy, ba thuộc tính này cũng có các yêu cầu giống như đối với mô-đun rust_library. Hãy xem các thuộc tính rust_library để biết thông tin chi tiết.

protos

Đây là danh sách các đường dẫn tương đối đến 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 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.

gốc_nguồn

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 dưới dạng hộp, 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 đã tạo. Không giống như các trình tạo nguồn khác, tên tệp được đặt tiền tố là mod_, tạo tên tệp cuối cùng là mod_<stem>. Điều này giúp tránh 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, bạn cũng có thể sử dụng toàn bộ thuộc tính thư viện để kiểm soát quá trình biên dịch thư viện, mặc dù hiếm khi cần xác định hoặc thay đổi các thuộc tính này.