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