BazelCon 2022 16-17 নভেম্বর নিউ ইয়র্ক এবং অনলাইনে আসছে।
নিবন্ধন আজ!

প্রোটোকল বাফার নিয়ম

সেভ করা পৃষ্ঠা গুছিয়ে রাখতে 'সংগ্রহ' ব্যবহার করুন আপনার পছন্দ অনুযায়ী কন্টেন্ট সেভ করুন ও সঠিক বিভাগে রাখুন।

নিয়ম

proto_lang_toolchain

proto_lang_toolchain(name, blacklisted_protos, command_line, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, mnemonic, plugin, plugin_format_flag, progress_message, proto_compiler, restricted_to, runtime, tags, target_compatible_with, testonly, visibility)

অবচয়। পরিবর্তে https://github.com/bazelbuild/rules_proto দয়া করে।

একটি LANG_proto_library নিয়ম (যেমন, java_proto_library ) কীভাবে প্রোটো-কম্পাইলারকে আহ্বান করবে তা নির্দিষ্ট করে। কিছু LANG_proto_library নিয়ম কমান্ড-লাইন পতাকা ব্যবহার করে কোন টুলচেন ব্যবহার করতে হবে তা নির্দিষ্ট করার অনুমতি দেয়; তাদের ডকুমেন্টেশন পরামর্শ.

সাধারণত আপনি আপনার জাভা কম্পাইলার টিউন করতে না চাইলে এই ধরনের নিয়ম লিখবেন না।

কোন কম্পাইলার আছে. প্রোটো-কম্পাইলারটি প্রোটো_লাইব্রেরি নিয়ম থেকে নেওয়া হয়েছে যা আমরা সংযুক্ত করি। এটি ব্লেজের কমান্ড-লাইন পতাকা হিসাবে পাস করা হয়। প্রোটো_লাইব্রেরি নিয়মেই বেশ কিছু বৈশিষ্ট্যের জন্য একটি প্রোটো-কম্পাইলার প্রয়োজন। LANG_proto_library যে কম্পাইলারটি ব্যবহার করে সেটি একটি proto_library এর মতই প্রয়োগ করা উপকারী।

উদাহরণ

একটি সহজ উদাহরণ হবে:

proto_lang_toolchain(
    name = "javalite_toolchain",
    command_line = "--javalite_out=shared,immutable:$(OUT)",
    plugin = ":javalite_plugin",
    runtime = ":protobuf_lite",
)

যুক্তি

গুণাবলী
name

Name ; required

এই লক্ষ্যের জন্য একটি অনন্য নাম।

blacklisted_protos

List of labels ; optional

Blacklisted_protos-এর srcs অ্যাট্রিবিউটে ফাইলগুলির জন্য কোনও কোড তৈরি blacklisted_protos হবে না। এটি .proto ফাইলগুলির জন্য ব্যবহৃত হয় যেগুলি ইতিমধ্যেই প্রোটো রানটাইমের সাথে লিঙ্ক করা আছে, যেমন any.proto
command_line

String; required

কোড তৈরি করতে এই মানটি প্রোটো-কম্পাইলারের কাছে পাঠানো হবে। শুধুমাত্র এই কোড-জেনারেটর/প্লাগইনের নির্দিষ্ট অংশগুলি অন্তর্ভুক্ত করুন (যেমন, -I পরামিতিগুলি অন্তর্ভুক্ত করবেন না)
  • $(OUT) হল LANG_proto_library-নির্দিষ্ট। নিয়মগুলি এই পরিবর্তনশীলটিকে কীভাবে ব্যাখ্যা করে তা নির্ধারণ করবে বলে আশা করা হচ্ছে। জাভার জন্য, উদাহরণস্বরূপ, $(OUT) তৈরি করার জন্য src-jar ফাইলের নাম দিয়ে প্রতিস্থাপিত হবে।
mnemonic

String; optional; default is "GenProto"

এই মানটি প্রোটোক অ্যাকশনের স্মারক হিসাবে সেট করা হবে।
plugin

Label ; optional

প্রদান করা হলে, প্রোটো-কম্পাইলারকে কল করে এমন অ্যাকশনের জন্য উপলব্ধ করা হবে এবং প্রোটো-কম্পাইলারের কাছে পাঠানো হবে: --plugin=protoc-gen-PLUGIN= . --plugin=protoc-gen-PLUGIN= .
plugin_format_flag

String; optional

প্রদান করা হলে, প্লাগইন ব্যবহার করার জন্য এই মানটি প্রোটো-কম্পাইলারের কাছে পাঠানো হবে। মানটিতে একটি একক %s থাকতে হবে যা এক্সিকিউটেবল প্লাগইন দিয়ে প্রতিস্থাপিত হবে। --plugin=protoc-gen-PLUGIN= . --plugin=protoc-gen-PLUGIN= .
progress_message

String; optional; default is "Generating proto_library %{label}"

এই মানটি প্রোটোক অ্যাকশনের অগ্রগতি বার্তা হিসাবে সেট করা হবে।
proto_compiler

Label ; optional

প্রোটো কম্পাইলার এক্সিকিউটেবল। প্রদান করা হলে, এই লক্ষ্যটি কোড তৈরি করতে একটি প্রোটো-কম্পাইলার হিসাবে ব্যবহার করা হবে।
runtime

Label ; optional

একটি ভাষা-নির্দিষ্ট লাইব্রেরি যার বিরুদ্ধে জেনারেট করা কোড সংকলিত হয়। সঠিক আচরণ হল LANG_proto_library-নির্দিষ্ট। জাভা, উদাহরণস্বরূপ, রানটাইমের বিপরীতে কম্পাইল করা উচিত।

প্রোটো_লাইব্রেরি

proto_library(name, deps, srcs, data, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, exports, features, import_prefix, licenses, restricted_to, strip_import_prefix, tags, target_compatible_with, testonly, visibility)

অবচয়। পরিবর্তে https://github.com/bazelbuild/rules_proto ব্যবহার করুন।

প্রোটোকল বাফারের লাইব্রেরি সংজ্ঞায়িত করতে proto_library ব্যবহার করুন যা একাধিক ভাষা থেকে ব্যবহার করা যেতে পারে। একটি proto_library সমর্থিত নিয়মের deps ক্লজে তালিকাভুক্ত হতে পারে, যেমন java_proto_library

কমান্ড-লাইনে কম্পাইল করা হলে, একটি proto_library foo-descriptor-set.proto.bin নামে একটি ফাইল তৈরি করে, যা srcs-এর নিয়মের বার্তাগুলির জন্য বর্ণনাকারী সেট। ফাইলটি একটি FileDescriptorSet , যা https://developers.google.com/protocol-buffers/docs/techniques#self-description এ বর্ণনা করা হয়েছে।

এটি শুধুমাত্র একটি proto_library নিয়ম দ্বারা সরাসরি উল্লিখিত .proto ফাইল সম্পর্কে তথ্য রয়েছে; ট্রানজিটিভ বর্ণনাকারী সেটের সংগ্রহ [ProtoInfo].transitive_descriptor_sets Starlark প্রদানকারীর মাধ্যমে উপলব্ধ। ProtoInfo.java এ ডকুমেন্টেশন দেখুন।

প্রস্তাবিত কোড সংগঠন:

  • .proto ফাইল প্রতি একটি proto_library নিয়ম।
  • foo.proto নামের একটি ফাইল foo.proto নামের একটি নিয়মে foo_proto , যা একই প্যাকেজে অবস্থিত।
  • একটি [language]_proto_library যা proto_library নামে একটি foo_proto মোড়ানো হয় তাকে foo_[language]_proto বলা উচিত এবং একই প্যাকেজে অবস্থিত হওয়া উচিত।

যুক্তি

গুণাবলী
name

Name ; required

এই লক্ষ্যের জন্য একটি অনন্য নাম।

deps

List of labels ; optional

অন্যান্য proto_library নিয়মের তালিকা যার উপর লক্ষ্য নির্ভর করে। একটি proto_library শুধুমাত্র অন্যান্য proto_library লক্ষ্যের উপর নির্ভর করতে পারে। এটি ভাষা-নির্দিষ্ট লাইব্রেরির উপর নির্ভর নাও করতে পারে।
srcs

List of labels ; optional

.proto এবং .protodevel ফাইলগুলির তালিকা যা লক্ষ্য তৈরি করতে প্রক্রিয়া করা হয়। এটি সাধারণত একটি খালি তালিকা নয়। একটি ইউজকেস যেখানে srcs খালি হতে পারে একটি উপনাম-লাইব্রেরি । এটি একটি প্রোটো_লাইব্রেরির নিয়ম যা ডিপ-এ এক বা একাধিক deps রয়েছে। এই প্যাটার্নটি ব্যবহার করা যেতে পারে যেমন একটি স্থায়ী নামে একটি পাবলিক এপিআই রপ্তানি করতে।
exports

List of labels ; optional

প্রোটো_লাইব্রেরি লক্ষ্যগুলির তালিকা যা প্রোটো উত্সে "ইমপোর্ট পাবলিক" এর মাধ্যমে উল্লেখ করা যেতে পারে।
import_prefix

String; optional

এই নিয়মে .proto ফাইলের পাথে যোগ করার উপসর্গ।

সেট করা হলে, এই নিয়মের srcs অ্যাট্রিবিউটের .proto সোর্স ফাইলগুলি অ্যাক্সেসযোগ্য হয় এই অ্যাট্রিবিউটের মান তাদের রিপোজিটরি-রিলেটিভ পাথের সাথে যুক্ত।

এই উপসর্গ যোগ করার আগে strip_import_prefix বৈশিষ্ট্যের উপসর্গটি সরানো হয়।

strip_import_prefix

String; optional

এই নিয়মে .proto ফাইলের পাথ থেকে বাদ দেওয়ার উপসর্গ।

সেট করা হলে, এই নিয়মের srcs অ্যাট্রিবিউটের .proto সোর্স ফাইলগুলি এই উপসর্গটি কেটে দিয়ে তাদের পথে অ্যাক্সেসযোগ্য।

যদি এটি একটি আপেক্ষিক পথ হয় (একটি স্ল্যাশ দিয়ে শুরু না হয়), এটি একটি প্যাকেজ-সম্পর্কিত হিসাবে নেওয়া হয়। যদি এটি একটি পরম এক হয়, এটি একটি সংগ্রহস্থল-আপেক্ষিক পথ হিসাবে বোঝা যায়।

import_prefix অ্যাট্রিবিউটে উপসর্গ যোগ করা হয় এই উপসর্গটি ছিনতাই করার পরে।