Hệ thống xây dựng hỗ trợ việc tạo các 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 thùng rust-protobuf
.
Để xem tài liệu về cách sử dụng này, hãy xem trang dự án trên GitHub cùng với ví dụ protobuf tương ứng.
gRPC protobuf cũng được hỗ trợ, với quá trình tạo do grpc-rs
crate 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 gRPC tương ứng trên GitHub.
Cách sử dụng cơ bản của bản dựng rust_protobuf
Sau đây là ví dụ về cách xác định một mô-đun protobuf và sử dụng mô-đun đó làm một thùng chứa. 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 này 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ụ này sử dụng mô-đun rust_bindgen
, nhưng phương tiện bao gồm nguồn giống nhau cho tất cả trình tạo nguồn.)
Xác định một mô-đun rust_protobuf Android.bp
Giả sử có một số proto tại src/protos/my.proto
tương ứng với Android.bp của bạn; 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",
}
Một thư viện sử dụng crate 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 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ở proto đều phải là duy nhất. Ví dụ: hãy 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 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
Các thuộc tính đáng chú ý của rust_protobuf
Ngoài các thuộc tính được xác định bên dưới, còn có 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 mô-đun đặc biệt quan trọng đối với các mô-đun protobuf Rust hoặc có 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 ra các biến thể thư viện, vì vậy, 3 thuộc tính này có các yêu cầu giống như đối với các 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 các tệp protobuf để tạo giao diện protobuf. Tên tệp cơ sở không được trùng lặp trên protos
và grpc_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 protos
và grpc_protos
.
source_stem
source_stem
là tên tệp của tệp nguồn được tạo mà bạn có thể thêm vào.
Đây là một định nghĩa bắt buộc về trường, ngay cả khi bạn đang sử dụng các liên kết dưới dạng một thùng chứa, 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 thêm tiền tố mod_, tạo thành tên tệp cuối cùng là mod_<stem>. Điều này giúp ngăn chặn 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ộ các thuộc tính của 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.