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/bazenbuild/rules_proto का इस्तेमाल करें.

बताता है कि lang_proto_library नियम (उदाहरण के लिए, java_proto_library) को प्रोटो-कंपाइलर का इस्तेमाल करना चाहिए. कुछ lang_proto_library नियम बताते हैं कि कमांड-लाइन फ़्लैग का इस्तेमाल करके किस टूलचेन का इस्तेमाल करें; उनके दस्तावेज़ देखें.

आम तौर पर, जब तक आप अपने Java कंपाइलर को ट्यून नहीं करना चाहते, तब तक आपको इस तरह के नियम नहीं लिखने चाहिए.

कोई कंपाइलर नहीं है. प्रोटो-कंपाइलर को हम प्रोटो_लाइब्रेरी नियम से जोड़ लेते हैं. इसे ब्लेज़ पर कमांड लाइन फ़्लैग के तौर पर पास किया गया है. कई सुविधाओं के लिए 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 एट्रिब्यूट में मौजूद फ़ाइलों के लिए कोई कोड जनरेट नहीं होगा. इसका इस्तेमाल .proto फ़ाइलों के लिए किया जाता है, जो पहले से ही प्रोटो रनटाइम में लिंक हैं, जैसे कि any.proto.
command_line

String; required

कोड जनरेट करने के लिए, यह वैल्यू प्रोटो-कंपाइलर को पास कर दी जाएगी. सिर्फ़ इस कोड-जनरेटर/प्लग इन के खास हिस्सों का इस्तेमाल करें (जैसे, -I पैरामीटर शामिल न करें)
  • $(OUT) lang_proto_library-Specific है. नियमों से यह तय किया जाना चाहिए कि वे इस वैरिएबल को कैसे समझते हैं. उदाहरण के लिए, Java बनाने के लिए, $(OUT) की जगह src- Jar फ़ाइल नाम का इस्तेमाल किया जाएगा.
mnemonic

String; optional; default is "GenProto"

यह वैल्यू, प्रोटोक ऐक्शन पर मॉनमोनिक के तौर पर सेट की जाएगी.
plugin

Label; optional

अगर इसे उपलब्ध कराया जाता है, तो उसे प्रोटो-कंपाइलर को कॉल करने वाली कार्रवाई के लिए उपलब्ध कराया जाएगा. साथ ही, इसे प्रोटो-कंपाइलर को पास किया जाएगा: --plugin=protoc-gen-PLUGIN=.
plugin_format_flag

String; optional

अगर यह मान दिया जाता है, तो प्लग इन का इस्तेमाल करने के लिए यह वैल्यू प्रोटो-कंपाइलर को भेजी जाएगी. वैल्यू में एक ही %s होना चाहिए, जिसे प्लग-इन एक्ज़ीक्यूटेबल से बदला जा सके. --plugin=protoc-gen-PLUGIN=.
progress_message

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

यह मान प्रोटोक कार्रवाई पर प्रगति मैसेज के रूप में सेट किया जाएगा.
proto_compiler

Label; optional

प्रोटो कंपाइलर एक्ज़ीक्यूटेबल हो सकता है. अगर दिया गया है, तो इस टारगेट का इस्तेमाल कोड जनरेट करने के लिए एक प्रोटो-कंपाइलर के तौर पर किया जाएगा.
runtime

Label; optional

जनरेट की गई कोड को बनाने के लिए, भाषा के हिसाब से बनी लाइब्रेरी का इस्तेमाल किया जाता है. सटीक व्यवहार lang_proto_library-specific है. उदाहरण के लिए, रनटाइम के हिसाब से Java को कंपाइल करना चाहिए.

प्रोटो_लाइब्रेरी

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/bazerbuild/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 फ़ाइलों के बारे में जानकारी होती है जिनके बारे में proto_library नियम के हिसाब से बताया गया होता है; ट्रांज़िटिव डिस्क्रिप्टर सेट का संग्रह, [ProtoInfo].transitive_descriptor_sets Starlark कंपनी के ज़रिए उपलब्ध कराया जाता है. ProtoInfo.java में दस्तावेज़ देखें.

सुझाया गया कोड संगठन:

  • हर .proto फ़ाइल के लिए एक proto_library नियम.
  • foo.proto नाम की फ़ाइल, foo_proto नाम के नियम में होगी. यह इसी पैकेज में है.
  • [language]_proto_library, जो foo_proto नाम वाला proto_library रैप करता है, उसे 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 एट्रिब्यूट में प्रीफ़िक्स जोड़ा जाता है.