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

अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है किसी समस्या की रिपोर्ट करें सोर्स देखें नाइटली · 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 नियम पर ही किसी प्रोटो-कंपाइलर को शुरू करना ज़रूरी है. कंपाइलर को लागू करना फ़ायदेमंद होता है, क्योंकि प्रोग्राम_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-Jर फ़ाइल का नाम डालें.
mnemonic

String; "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

String; "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 नाम के नियम में होगी, जिसमें उसी पैकेज में मौजूद हो.
  • एक [language]_proto_library, जो नाम वाले proto_library को रैप करता है foo_proto को कॉल करना चाहिए foo_[language]_proto और एक ही पैकेज में हों.

तर्क

विशेषताएं
name

नाम; आवश्यक

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

deps

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

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

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

ऐसी .proto और .protodevel फ़ाइलों की सूची जिन्हें टारगेट बनाने के लिए प्रोसेस की गई. आम तौर पर, यह सूची खाली नहीं होती है. इस्तेमाल का एक उदाहरण जहां srcs को खाली छोड़ा जा सकता है, वह alias-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 एट्रिब्यूट में यह प्रीफ़िक्स इस प्रीफ़िक्स के बाद जोड़ा गया है हटाया गया.