מודולי פרוטובוף

מערכת הבנייה תומכת ביצירת ממשקי protobuf דרך סוג המודול rust_protobuf .

יצירת קוד פרוטובוף בסיסי מתבצעת עם ארגז rust-protobuf . כדי לצפות בתיעוד על שימוש זה, עיין בדף הפרויקט של GitHub עם דוגמאות פרוטובוף מתאימות.

פרוטובופים של gRPC נתמכים גם, כאשר היצירה מסופקת על ידי ארגז grpc-rs . כדי לצפות בתיעוד על שימוש זה, עיין בתיעוד בדף הפרויקט המתאים של gRPC GitHub .

שימוש בסיסי במבנה rust_protobuf

להלן דוגמה להגדרת מודול 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",
}

ספרייה שמשתמשת בארגז זה מוגדרת על ידי הפניה אליו כאילו הייתה כל תלות אחרת בספרייה:

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 .

stam, name, 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 הוא שם הקובץ של קובץ המקור שנוצר שניתן לכלול. זוהי הגדרת שדה נדרשת, גם אם אתה משתמש ב-bindings בתור ארגז, מכיוון שמאפיין stem שולט רק בשם קובץ הפלט עבור גרסאות הספרייה שנוצרו. בניגוד למחוללי מקור אחרים, שם הקובץ מקבל קידומת mod_ , מה שהופך את שם הקובץ הסופי mod_<stem> . זה מונע התנגשויות שמות עם מקורות שנוצרו מכל פרוטו.

בנוסף, כמו מודול ה-bindgen bindings, גם הסט המלא של מאפייני הספרייה זמין כדי לשלוט בהידור הספרייה, אם כי לעתים נדירות יש צורך להגדיר או לשנות אותם.