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

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

नियम

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/baZbuild/rules_proto पर जाकर नियम लोड करें.

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

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

कोई कंपाइलर नहीं है. प्रोटो-कंपाइलर, उस proto_library नियम से लिया जाता है जिससे हम जुड़े हुए होते हैं. इसे Blaze को कमांड-लाइन फ़्लैग के रूप में पास किया जाता है. कई सुविधाओं का इस्तेमाल करने के लिए, Proto_library नियम पर ही किसी प्रोटो-कंपाइलर को शुरू करना ज़रूरी है. कंपाइलर को लागू करना फ़ायदेमंद होता है, जैसा कि proto_library में इस्तेमाल किया जाता है. lang_proto_library लागू करता है.

उदाहरण

इसका एक सरल उदाहरण यह होगा:

proto_lang_toolchain(
    name = "javalite_toolchain",
    command_line = "--javalite_out=shared,immutable:$(OUT)",
    plugin = ":javalite_plugin",
    runtime = ":protobuf_lite",
)

तर्क

विशेषताएं
name

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

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

blacklisted_protos

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

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

स्ट्रिंग; आवश्यक है

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

स्ट्रिंग; डिफ़ॉल्ट तौर पर "GenProto" है

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

स्ट्रिंग; डिफ़ॉल्ट तौर पर "legacy" है

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

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

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

स्ट्रिंग; डिफ़ॉल्ट तौर पर "" है

अगर यह वैल्यू दी जाती है, तो प्लगिन का इस्तेमाल करने के लिए यह वैल्यू, प्रोटोकॉल-कंपाइलर को भेज दी जाएगी. मान में एक ऐसा %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/ba इमारतोंbuild/rules_proto का इस्तेमाल करें.

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

कमांड-लाइन पर कंपाइल किए जाने पर, proto_library foo-descriptor-set.proto.bin नाम की एक फ़ाइल बनाता है. यह डिस्क्रिप्टर है, जो मैसेज के नियम के लिए सेट होता है. फ़ाइल, क्रम से लगाई गई 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 फ़ाइलों की सूची. आम तौर पर, यह सूची खाली नहीं होती है. एक इस्तेमाल का उदाहरण, alias-library होता है जिसमें srcs खाली रह सकता है. यह एक proto_library नियम है जिसमें deps में एक या एक से ज़्यादा, proto_library है. इस पैटर्न का इस्तेमाल, उदाहरण के लिए, किसी स्थायी नाम के तहत कोई सार्वजनिक एपीआई एक्सपोर्ट करने के लिए किया जा सकता है.
allow_exports

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

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

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

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

स्ट्रिंग; डिफ़ॉल्ट तौर पर "" है

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

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

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

strip_import_prefix

स्ट्रिंग; डिफ़ॉल्ट तौर पर "" है

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

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

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

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