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