प्रोटोकॉल बफ़र के नियम

किसी समस्या की रिपोर्ट करें सोर्स देखें नाइटली · 7.4 को अपनाएं. 7.3 · 7.2 · 7.1 · 7.0 · 6.5

नियम

proto_lang_toolchain

नियम का सोर्स देखें
proto_lang_toolchain(name, blacklisted_protos, command_line, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, mnemonic, output_files, plugin, plugin_format_flag, progress_message, proto_compiler, restricted_to, runtime, tags, target_compatible_with, testonly, visibility)

यदि Basel का उपयोग किया जा रहा है, तो कृपया से नियम लोड करें https://github.com/bazelbuild/rules_proto.

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

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

कोई कंपाइलर नहीं है. प्रोटो-कंपाइलर को proto_library नियम से लिया जाता है, जिसे हम अटैच करते हैं. हां Blaze को कमांड-लाइन फ़्लैग के तौर पर भेजा गया था. कई सुविधाओं के लिए, 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

नाम; यह ज़रूरी है

इस टारगेट के लिए यूनीक नाम.

blacklisted_protos

लेबल की सूची; डिफ़ॉल्ट [] है

इसकी srcs एट्रिब्यूट में मौजूद फ़ाइलों के लिए कोई कोड जनरेट नहीं होगा blacklisted_protos. इसका इस्तेमाल उन .proto फ़ाइलों के लिए किया जाता है जो पहले से ही प्रोटो रनटाइम से लिंक होती हैं, जैसे कि any.proto.
command_line

String; आवश्यक

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

स्ट्रिंग; डिफ़ॉल्ट रूप से "GenProto"

इस वैल्यू को प्रोटॉक ऐक्शन पर याद रखने वाले व्यक्ति के तौर पर सेट किया जाएगा.
output_files

String; "legacy" डिफ़ॉल्ट है

यह कंट्रोल करता है कि command_line में $(OUT) को कैसे फ़ॉर्मैट किया जाए. इसके लिए, एक फ़ाइल के पाथ या एक से ज़्यादा फ़ाइलों के मामले में आउटपुट डायरेक्ट्री का इस्तेमाल किया जाता है. संभावित वैल्यू ये हैं: "एक", "एक से ज़्यादा".
plugin

लेबल; डिफ़ॉल्ट रूप से None है

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

String; "" डिफ़ॉल्ट है

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

स्ट्रिंग; डिफ़ॉल्ट रूप से "Generating proto_library %{label}"

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

लेबल; डिफ़ॉल्ट रूप से None है

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

लेबल; डिफ़ॉल्ट None है

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

proto_library

नियम का सोर्स देखें
proto_library(name, deps, srcs, data, allow_exports, 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/batzbuild/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 नाम के नियम में होगी, जिसमें उसी पैकेज में मौजूद हो.
  • foo_proto नाम वाले proto_library को रैप करने वाले [language]_proto_library को foo_[language]_proto कहा जाना चाहिए. साथ ही, यह एक ही पैकेज में होना चाहिए.

तर्क

विशेषताएं
name

नाम; यह ज़रूरी है

इस टारगेट के लिए यूनीक नाम.

deps

लेबल की सूची; डिफ़ॉल्ट [] है

टारगेट पर लागू होने वाले अन्य proto_library नियमों की सूची. proto_library, सिर्फ़ अन्य क्वेरी पर निर्भर करता है proto_library टारगेट. ऐसा हो सकता है कि यह भाषा के हिसाब से लाइब्रेरी पर निर्भर न हो.
srcs

लेबल की सूची; डिफ़ॉल्ट [] है

टारगेट बनाने के लिए प्रोसेस की गई .proto और .protodevel फ़ाइलों की सूची. आम तौर पर, यह सूची खाली नहीं होती. अन्य नाम वाली लाइब्रेरी एक ऐसा उदाहरण है जहां srcs खाली हो सकता है. यह एक ऐसा proto_library नियम है जिसमें deps में एक या उससे ज़्यादा अन्य proto_library हैं. इस पैटर्न का इस्तेमाल, किसी सार्वजनिक एपीआई को किसी ऐसे नाम से एक्सपोर्ट करने के लिए किया जा सकता है जो हमेशा मौजूद रहता है.
allow_exports

लेबल; डिफ़ॉल्ट रूप से None है

एक वैकल्पिक अनुमति वाली सूची, जो प्रोटो लाइब्रेरी को फिर से एक्सपोर्ट करने या सूची में शामिल किसी पैकेज में, lang_proto_library का इस्तेमाल करने से रोकती है.
exports

लेबल की सूची; डिफ़ॉल्ट [] है

Proto_library टारगेट की सूची, जिसे "सार्वजनिक इंपोर्ट करें" के ज़रिए रेफ़र किया जा सकता है प्रोटो में स्रोत.
import_prefix

String; "" डिफ़ॉल्ट है

इस नियम में .proto फ़ाइलों के पाथ में जोड़ने के लिए प्रीफ़िक्स.

सेट होने पर, इस नियम के srcs एट्रिब्यूट में मौजूद .proto सोर्स फ़ाइलों को इस एट्रिब्यूट की वैल्यू पर ऐक्सेस किया जा सकता है. यह वैल्यू, उनकी रिपॉज़िटरी के हिसाब से तय किए गए पाथ के आगे जोड़ी जाती है.

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

strip_import_prefix

String; "" डिफ़ॉल्ट है

इस नियम में मौजूद .proto फ़ाइलों के पाथ से निकालने के लिए प्रीफ़िक्स.

अगर नीति को सेट किया जाता है, तो इस नियम के srcs एट्रिब्यूट में मौजूद .proto सोर्स फ़ाइलें इस तरह होंगी इस प्रीफ़िक्स कट ऑफ़ के साथ अपने पाथ से ऐक्सेस कर सकते हैं.

अगर यह रिलेटिव पाथ है (स्लैश से शुरू नहीं होता), तो इसे पैकेज-रिलेटिव के तौर पर लिया जाता है एक. अगर यह सटीक है, तो इसे रिपॉज़िटरी-रिलेटिव पाथ माना जाता है.

import_prefix एट्रिब्यूट में प्रीफ़िक्स, इस प्रीफ़िक्स को हटाने के बाद जोड़ा जाता है.