โมดูล Protobuf

ระบบบิลด์รองรับการสร้างอินเทอร์เฟซ 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 ชุดคุณสมบัติไลบรารีทั้งหมดยังพร้อมใช้งานเพื่อควบคุมการคอมไพล์ไลบรารี แม้ว่าจะแทบไม่จำเป็นต้องกำหนดหรือเปลี่ยนแปลงก็ตาม