ระบบบิลด์รองรับการสร้างอินเทอร์เฟซ protobuf ผ่านประเภทโมดูล rust_protobuf
การสร้างโค้ดโปรโตบัฟขั้นพื้นฐานจะดำเนินการด้วยลังกัน rust-protobuf
หากต้องการดูเอกสารเกี่ยวกับการใช้งานนี้ โปรดดู หน้าโครงการ GitHub พร้อมด้วย ตัวอย่าง protobuf ที่เกี่ยวข้อง
นอกจากนี้ยังรองรับโปรโตบัฟ gRPC ด้วยการสร้างที่จัดทำโดยลัง grpc-rs
หากต้องการดูเอกสารเกี่ยวกับการใช้งานนี้ โปรดดูเอกสารใน หน้าโครงการ gRPC GitHub ที่เกี่ยวข้อง
การใช้ build_protobuf พื้นฐาน
ต่อไปนี้เป็นตัวอย่างของการกำหนดโมดูล protobuf และการใช้โมดูลนั้นเป็นลัง รายละเอียดเพิ่มเติมเกี่ยวกับคุณสมบัติที่สำคัญและวิธีการใช้งานอยู่ในส่วน การกำหนด rust_protobuf
หากคุณต้องการใช้โค้ดที่สร้าง protobuf ผ่านมาโคร include!()
เช่น สำหรับโค้ดจากบุคคลที่สาม โปรดดูตัวอย่างที่หน้า Source Generators (ตัวอย่างใช้โมดูล rust_bindgen
แต่วิธีการรวมแหล่งที่มาจะเหมือนกันสำหรับตัวสร้างแหล่งที่มาทั้งหมด)
กำหนดโมดูลrust_protobuf Android.bp
สมมติว่าโปรโตบางตัวที่ src/protos/my.proto
สัมพันธ์กับ Android.bp ของคุณ โมดูลถูกกำหนดไว้ดังต่อไปนี้:
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",
}
ไลบรารีที่ใช้ลังนี้ถูกกำหนดโดยการอ้างอิงราวกับว่าเป็นการพึ่งพาไลบรารีอื่น:
rust_binary {
name: "hello_rust_proto",
srcs: ["src/main.rs"],
rustlibs: ["libmy_proto"],
}
โครงสร้างลังของโมดูลrust_protobuf
ไฟล์ protobuf แต่ละไฟล์จะถูกจัดระเบียบเป็นโมดูลของตัวเองภายในลัง โดยใช้ชื่อของไฟล์ protobuf ซึ่งหมายความว่าชื่อไฟล์ฐานโปรโตทั้งหมดจะต้องไม่ซ้ำกัน ตัวอย่างเช่น ใช้ rust_protobuf
ที่กำหนดดังนี้:
rust_protobuf {
name: "libfoo",
crate_name: "foo",
protos: ["a.proto", "b.proto"],
grpc_protos: ["c.proto"],
source_stem: "my_proto_source",
}
คุณจะเข้าถึงโปรโตสต่างๆ ภายในลังนี้ได้ดังนี้:
// 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
คุณสมบัติrust_protobuf ที่โดดเด่น
คุณสมบัติที่กำหนดไว้ด้านล่างเป็นส่วนเพิ่มเติมจาก คุณสมบัติทั่วไปที่สำคัญ ที่ใช้กับโมดูลทั้งหมด สิ่งเหล่านี้มีความสำคัญอย่างยิ่งต่อโมดูล Rust protobuf หรือแสดงลักษณะการทำงานเฉพาะสำหรับประเภทโมดูล rust_protobuf
โดยเฉพาะ
ก้านชื่อ crate_name
rust_protobuf
สร้างตัวแปรไลบรารี ดังนั้นจึงมีข้อกำหนดเดียวกันสำหรับคุณสมบัติทั้งสามนี้ เช่นเดียวกับที่ทำกับโมดูล rust_library
ดูคุณสมบัติ rust_library
สำหรับรายละเอียด
โปรโตส
นี่คือรายการเส้นทางสัมพัทธ์ไปยังไฟล์ protobuf เพื่อสร้างอินเทอร์เฟซ protobuf ชื่อไฟล์ฐานต้องไม่ซ้ำกันระหว่าง protos
และ grpc_protos
grpc_protos
grpc_protos
ประกอบด้วยรายการพาธสัมพัทธ์ไปยังไฟล์ protobuf ที่กำหนด grpcs
เพื่อสร้างอินเทอร์เฟซ protobuf ชื่อไฟล์ฐานต้องไม่ซ้ำกันระหว่าง protos
และ grpc_protos
แหล่งที่มา_ต้นกำเนิด
source_stem
คือชื่อไฟล์สำหรับ ไฟล์ต้นฉบับที่สร้างขึ้น ซึ่งสามารถรวมไว้ได้ นี่เป็นคำจำกัดความของฟิลด์ที่จำเป็น แม้ว่าคุณจะใช้การเชื่อมโยงเป็นลังก็ตาม เนื่องจากคุณสมบัติ stem
จะควบคุมเฉพาะชื่อไฟล์เอาต์พุตสำหรับตัวแปรไลบรารีที่สร้างขึ้นเท่านั้น ไม่เหมือนกับตัวสร้างแหล่งที่มาอื่นๆ ชื่อไฟล์จะมีคำนำหน้าด้วย mod_ ทำให้เป็นชื่อไฟล์สุดท้าย mod_<stem> วิธีนี้จะป้องกันการขัดแย้งกันของชื่อกับแหล่งที่มาที่สร้างขึ้นจากแต่ละโปรโต
นอกจากนี้ เช่นเดียวกับโมดูลการผูกมัด bindgen ชุดคุณสมบัติไลบรารีทั้งหมดยังพร้อมใช้งานเพื่อควบคุมการคอมไพล์ไลบรารี แม้ว่าจะแทบไม่จำเป็นต้องกำหนดหรือเปลี่ยนแปลงก็ตาม