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

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

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

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

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

নিচে একটি প্রোটোবাফ মডিউল সংজ্ঞায়িত করার এবং সেই মডিউলটিকে একটি ক্রেট হিসেবে ব্যবহার করার উদাহরণ দেওয়া হলো। গুরুত্বপূর্ণ প্রোপার্টিগুলো এবং সেগুলো কীভাবে ব্যবহৃত হয়, সে সম্পর্কে আরও বিস্তারিত তথ্য "একটি rust_protobuf সংজ্ঞায়িত করা" (Defining a 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 বিবেচনা করুন:

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 লাইব্রেরির বিভিন্ন সংস্করণ তৈরি করে, তাই এই তিনটি প্রপার্টির ক্ষেত্রেও rust_library মডিউলগুলোর মতোই একই শর্তাবলী প্রযোজ্য। বিস্তারিত জানতে rust_library প্রপার্টিগুলো দেখুন।

প্রোটোস

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

grpc_protos

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

উৎস_কাণ্ড

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

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