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

नियम

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/batzbuild/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

Name; required

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

blacklisted_protos

List of labels; optional

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

String; required

कोड जनरेट करने के लिए, यह वैल्यू प्रोटो-कंपाइलर को दी जाएगी. सिर्फ़ हिस्से शामिल करें यह कोड-जनरेटर/प्लग-इन के लिए खास तौर पर काम करता है (जैसे, -I पैरामीटर शामिल न करें)
  • $(OUT), lang_proto_library-विशिष्ट है. नियमों को तय करना कि वे इस वैरिएबल को कैसे समझते हैं. उदाहरण के लिए, Java के लिए, $(OUT) को इससे बदल दिया जाएगा बनाने के लिए src-Jर फ़ाइल का नाम डालें.
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

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

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/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

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

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

String; optional

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

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

इससे पहले strip_import_prefix एट्रिब्यूट का प्रीफ़िक्स हटा दिया जाता है उपसर्ग जोड़ा गया है.

strip_import_prefix

String; optional

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

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

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

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