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

अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है किसी समस्या की शिकायत करें सोर्स देखें नाइटली · 7.3 · 7.2 · 7.1 · 7.0 · 6.5

नियम

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, toolchains, visibility)

यदि Basel का उपयोग किया जा रहा है, तो कृपया से नियम लोड करें https://github.com/bazelbuild/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 कंपनी. proto_info.bzl में दस्तावेज़ देखें.

सुझाया गया कोड संगठन:

  • हर .proto फ़ाइल के लिए एक proto_library नियम.
  • foo.proto नाम की फ़ाइल, foo_proto नाम के नियम में होगी, जो उसी पैकेज में मौजूद हो.
  • proto_library को रैप करने वाला [language]_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 टारगेट की सूची, जिसे "सार्वजनिक इंपोर्ट करें" के ज़रिए रेफ़र किया जा सकता है में प्रोटो सोर्स भी है. "सार्वजनिक तौर पर इंपोर्ट करें" का इस्तेमाल करने पर यह गड़बड़ी होती है लेकिन संबंधित लाइब्रेरी को सूचीबद्ध न करें एक्सपोर्ट एट्रिब्यूट में. ध्यान दें कि आपने लाइब्रेरी को डिप और एक्सपोर्ट, दोनों में ही लिस्ट किया है, क्योंकि सभी अब तक lang_proto_library लागू करने का तरीका बदल दिया गया है.
import_prefix

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

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

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

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

strip_import_prefix

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

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

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

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

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

proto_lang_toolchain

नियम का सोर्स देखें
proto_lang_toolchain(name, allowlist_different_package, blacklisted_protos, command_line, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, mnemonic, output_files, plugin, plugin_format_flag, progress_message, protoc_minimal_do_not_use, restricted_to, runtime, tags, target_compatible_with, testonly, toolchain_type, toolchains, 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

नाम; आवश्यक

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

allowlist_different_package

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

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}" डिफ़ॉल्ट है

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

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

runtime

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

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

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