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

किसी समस्या की शिकायत करें सोर्स देखें

नियम

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/rule_proto से नियम लोड करें.

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

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

कोई कंपाइलर नहीं है. यह प्रोटो-कंपाइलर, proto_library नियम से जुड़ा होता है, जिसे हम अटैच करते हैं. इसे ब्लेज़ के लिए कमांड-लाइन फ़्लैग के तौर पर पास किया गया है. कई सुविधाओं के लिए ज़रूरी है कि प्रोटो-कंपाइलर को Proto_library नियम पर ही लागू किया जाए. कंपाइलर लागू करना फ़ायदेमंद होता है, जिसका इस्तेमाल MSG_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), LING_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. उदाहरण के लिए, 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/bazelbuild/rule_proto का उपयोग करें.

प्रोटोकॉल बफ़र की लाइब्रेरी तय करने के लिए, proto_library का इस्तेमाल करें. इस लाइब्रेरी का इस्तेमाल कई भाषाओं में किया जा सकता है. हो सकता है कि proto_library, java_proto_library जैसे कुछ नियमों के deps क्लॉज़ में शामिल हो.

कमांड-लाइन पर कंपाइल किए जाने पर 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 नाम वाले proto_library को रैप करने वाले [language]_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 के इस्तेमाल का एक उदाहरण alias-library होता है. यह deps में एक या इससे ज़्यादा अन्य proto_library नियम हैं. इस पैटर्न का इस्तेमाल, सार्वजनिक एपीआई को किसी स्थायी नाम में एक्सपोर्ट करने के लिए किया जा सकता है.
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 एट्रिब्यूट में प्रीफ़िक्स जोड़ा जाता है.