প্রোটোবাফ মডিউল

বিল্ড সিস্টেম rust_protobuf মডিউল টাইপের মাধ্যমে প্রোটোবাফ ইন্টারফেস তৈরি করতে সহায়তা করে।

বেসিক প্রোটোবাফ কোড জেনারেশন করা হয় rust-protobuf ক্রেট দিয়ে। এই ব্যবহারের ডকুমেন্টেশন দেখতে, সংশ্লিষ্ট protobuf উদাহরণ সহ GitHub প্রকল্প পৃষ্ঠা দেখুন।

gRPC প্রোটোবাফগুলিও সমর্থিত, grpc-rs ক্রেট দ্বারা সরবরাহ করা প্রজন্মের সাথে। এই ব্যবহারের ডকুমেন্টেশন দেখতে, সংশ্লিষ্ট gRPC GitHub প্রকল্প পৃষ্ঠায় ডকুমেন্টেশন দেখুন।

মৌলিক মরিচা_প্রোটোবাফ বিল্ড ব্যবহার

নিম্নলিখিতটি একটি প্রোটোবাফ মডিউল সংজ্ঞায়িত করার এবং সেই মডিউলটিকে ক্রেট হিসাবে ব্যবহার করার একটি উদাহরণ প্রদান করে। গুরুত্বপূর্ণ বৈশিষ্ট্য এবং সেগুলি কীভাবে ব্যবহার করা হয় সে সম্পর্কে আরও বিশদ বিবরণ একটি rust_protobuf বিভাগে রয়েছে।

আপনি যদি একটি include!() ম্যাক্রোর মাধ্যমে প্রোটোবাফ জেনারেটেড কোড ব্যবহার করতে চান, যেমন তৃতীয় পক্ষের কোডের জন্য, উদাহরণের জন্য উত্স জেনারেটর পৃষ্ঠাটি দেখুন৷ (উদাহরণটি একটি rust_bindgen মডিউল ব্যবহার করে, তবে উত্স অন্তর্ভুক্তির উপায় সমস্ত উত্স জেনারেটরের জন্য একই।)

একটি rust_protobuf Android.bp মডিউল সংজ্ঞায়িত করুন

আপনার Android.bp-এর তুলনায় src/protos/my.proto এ কিছু প্রোটো অনুমান করুন; মডিউল তারপর নিম্নলিখিত হিসাবে সংজ্ঞায়িত করা হয়:

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 নিন:

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_library মডিউলগুলির জন্য করে। বিস্তারিত জানার জন্য rust_library বৈশিষ্ট্য দেখুন।

প্রোটো

এটি প্রোটোবাফ ইন্টারফেস তৈরি করতে প্রোটোবাফ ফাইলগুলির আপেক্ষিক পাথগুলির একটি তালিকা। বেস ফাইলের নামগুলি অবশ্যই protos এবং grpc_protos জুড়ে অনন্য হতে হবে।

grpc_protos

grpc_protos প্রোটোবাফ ফাইলগুলির আপেক্ষিক পাথগুলির একটি তালিকা নিয়ে গঠিত যা প্রোটোবাফ ইন্টারফেস তৈরি করতে grpcs সংজ্ঞায়িত করে। বেস ফাইলের নামগুলি অবশ্যই protos এবং grpc_protos জুড়ে অনন্য হতে হবে।

উৎস_স্টেম

source_stem হল জেনারেট করা সোর্স ফাইলের ফাইলের নাম যা অন্তর্ভুক্ত করা যেতে পারে। এটি একটি প্রয়োজনীয় ক্ষেত্রের সংজ্ঞা, এমনকি যদি আপনি বাইন্ডিংগুলিকে ক্রেট হিসাবে ব্যবহার করেন, যেহেতু stem সম্পত্তি শুধুমাত্র জেনারেট করা লাইব্রেরি ভেরিয়েন্টগুলির জন্য আউটপুট ফাইলের নাম নিয়ন্ত্রণ করে। অন্যান্য উৎস জেনারেটর থেকে ভিন্ন, ফাইলের নাম mod_ দ্বারা উপসর্গযুক্ত হয় , চূড়ান্ত ফাইলের নাম mod_<stem> তৈরি করে। এটি প্রতিটি প্রোটো থেকে উত্পন্ন উত্সের সাথে নামের সংঘর্ষ প্রতিরোধ করে।

উপরন্তু, বাইন্ডজেন বাইন্ডিং মডিউলের মতো, লাইব্রেরি সংকলন নিয়ন্ত্রণ করার জন্য লাইব্রেরি বৈশিষ্ট্যের সম্পূর্ণ সেটও উপলব্ধ, যদিও এইগুলি খুব কমই সংজ্ঞায়িত বা পরিবর্তন করা প্রয়োজন।