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