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

समस्या की शिकायत करें सोर्स देखें Nightly · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

नियम

cc_proto_library

नियम का सोर्स देखें
cc_proto_library(name, deps, aspect_hints, compatible_with, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, features, package_metadata, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

cc_proto_library, .proto फ़ाइलों से C++ कोड जनरेट करता है.

deps, proto_library के नियमों के मुताबिक होना चाहिए.

उदाहरण:


cc_library(
    name = "lib",
    deps = [":foo_cc_proto"],
)

cc_proto_library(
    name = "foo_cc_proto",
    deps = [":foo_proto"],
)

proto_library(
    name = "foo_proto",
)

तर्क

विशेषताएं
name

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

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

deps

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

proto_library नियमों की सूची, जिनके लिए C++ कोड जनरेट करना है.

java_lite_proto_library

नियम का सोर्स देखें
java_lite_proto_library(name, deps, aspect_hints, compatible_with, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, features, package_metadata, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

java_lite_proto_library, .proto फ़ाइलों से Java कोड जनरेट करता है.

deps, proto_library के नियमों के मुताबिक होना चाहिए.

उदाहरण:


java_library(
    name = "lib",
    runtime_deps = [":foo"],
)

java_lite_proto_library(
    name = "foo",
    deps = [":bar"],
)

proto_library(
    name = "bar",
)

तर्क

विशेषताएं
name

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

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

deps

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

proto_library नियमों की सूची, जिनके लिए Java कोड जनरेट करना है.

java_proto_library

नियम का सोर्स देखें
java_proto_library(name, deps, aspect_hints, compatible_with, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, features, licenses, package_metadata, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

java_proto_library, .proto फ़ाइलों से Java कोड जनरेट करता है.

deps, proto_library के नियमों के मुताबिक होना चाहिए.

उदाहरण:


java_library(
    name = "lib",
    runtime_deps = [":foo_java_proto"],
)

java_proto_library(
    name = "foo_java_proto",
    deps = [":foo_proto"],
)

proto_library(
    name = "foo_proto",
)

तर्क

विशेषताएं
name

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

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

deps

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

proto_library नियमों की सूची, जिनके लिए Java कोड जनरेट करना है.

proto_library

नियम का सोर्स देखें
proto_library(name, deps, srcs, data, allow_exports, aspect_hints, compatible_with, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, exports, features, import_prefix, licenses, package_metadata, restricted_to, strip_import_prefix, tags, target_compatible_with, testonly, toolchains, visibility)

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

कमांड-लाइन पर कंपाइल करने पर, proto_library foo-descriptor-set.proto.bin नाम की एक फ़ाइल बनाता है. यह उन मैसेज के लिए डिस्क्रिप्टर सेट होता है जिनके लिए नियम src करता है. यह फ़ाइल, क्रम से लगाई गई 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 नाम के नियम में होगी. यह नियम, उसी पैकेज में मौजूद होगा.
  • foo_proto नाम के proto_library को रैप करने वाले [language]_proto_library को foo_[language]_proto कहा जाना चाहिए. साथ ही, यह उसी पैकेज में मौजूद होना चाहिए.

तर्क

विशेषताएं
name

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

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

deps

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

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

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

.proto और .protodevel फ़ाइलों की सूची, जिन्हें टारगेट बनाने के लिए प्रोसेस किया जाता है. आम तौर पर, यह सूची खाली नहीं होती है. srcs खाली होने का एक उदाहरण alias-library है. यह एक proto_library नियम है, जिसमें deps में एक या उससे ज़्यादा अन्य proto_library हैं. इस पैटर्न का इस्तेमाल, उदाहरण के लिए, किसी सार्वजनिक एपीआई को एक स्थायी नाम से एक्सपोर्ट करने के लिए किया जा सकता है.
allow_exports

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

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

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

proto_library टारगेट की सूची, जिन्हें proto सोर्स में "import public" के ज़रिए रेफ़रंस किया जा सकता है. अगर आपने "import public" का इस्तेमाल किया है, लेकिन एक्सपोर्ट एट्रिब्यूट में उससे जुड़ी लाइब्रेरी को शामिल नहीं किया है, तो इसे गड़बड़ी माना जाएगा. ध्यान दें कि आपको deps और exports, दोनों में लाइब्रेरी को लिस्ट करना होगा, क्योंकि अब तक सभी lang_proto_library के लागू होने के तरीके में बदलाव नहीं किया गया है.
import_prefix

स्ट्रिंग; डिफ़ॉल्ट वैल्यू "" है

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

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

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

strip_import_prefix

स्ट्रिंग; डिफ़ॉल्ट वैल्यू "/" है

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

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

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

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

py_proto_library

नियम का सोर्स देखें
py_proto_library(name, deps, aspect_hints, compatible_with, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, features, package_metadata, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
`.proto` फ़ाइलों से Python लाइब्रेरी जनरेट करने के लिए, `py_proto_library` का इस्तेमाल करें. `proto_library` नियम `foo_proto` को रैप करने पर, `py_proto_library` नियम का नाम `foo_py_pb2` रखने का तरीका इस्तेमाल किया जाता है. `deps` को `proto_library` नियम की ओर ले जाना चाहिए. उदाहरण: ```starlark py_library( name = "lib", deps = [":foo_py_pb2"], ) py_proto_library( name = "foo_py_pb2", deps = [":foo_proto"], ) proto_library( name = "foo_proto", srcs = ["foo.proto"], ) ```

तर्क

विशेषताएं
name

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

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

deps

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

Python लाइब्रेरी जनरेट करने के लिए, `proto_library` नियमों की सूची. आम तौर पर, यह सिर्फ़ एक टारगेट होता है: दिलचस्पी वाली प्रोटो लाइब्रेरी. यह `ProtoInfo` देने वाला कोई भी टारगेट हो सकता है.

proto_lang_toolchain

नियम का सोर्स देखें
proto_lang_toolchain(name, allowlist_different_package, aspect_hints, blacklisted_protos, command_line, compatible_with, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, features, mnemonic, output_files, package_metadata, plugin, plugin_format_flag, progress_message, protoc_minimal_do_not_use, restricted_to, runtime, tags, target_compatible_with, testonly, toolchain_type, toolchains, visibility)

अगर Bazel का इस्तेमाल किया जा रहा है, तो कृपया https://github.com/bazelbuild/rules_proto से नियम लोड करें.

इससे पता चलता है कि LANG_proto_library नियम (जैसे, java_proto_library) को proto-compiler को कॉल करना चाहिए. LANG_proto_library के कुछ नियमों के तहत, कमांड-लाइन फ़्लैग का इस्तेमाल करके यह तय किया जा सकता है कि किस टूलचेन का इस्तेमाल करना है; इनके दस्तावेज़ देखें.

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

कोई कंपाइलर नहीं है. प्रोटो-कंपाइलर को उस proto_library नियम से लिया जाता है जिसे हम अटैच करते हैं. इसे Blaze को कमांड-लाइन फ़्लैग के तौर पर पास किया जाता है. कई सुविधाओं के लिए, proto_library नियम पर proto-compiler को चालू करना ज़रूरी होता है. यह ज़रूरी है कि LANG_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

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

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

स्ट्रिंग; ज़रूरी है

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

स्ट्रिंग; डिफ़ॉल्ट वैल्यू "GenProto" है

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

स्ट्रिंग; डिफ़ॉल्ट वैल्यू "legacy" है

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

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

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

स्ट्रिंग; डिफ़ॉल्ट वैल्यू "" है

अगर यह वैल्यू दी जाती है, तो इसे प्लगिन का इस्तेमाल करने के लिए, प्रोटो-कंपाइलर को पास किया जाएगा. वैल्यू में सिर्फ़ एक %s होना चाहिए, जिसे प्लगिन एक्ज़ीक्यूटेबल से बदल दिया जाता है. --plugin=protoc-gen-PLUGIN=<executable>.
progress_message

स्ट्रिंग; डिफ़ॉल्ट वैल्यू "Generating proto_library %{label}" है

यह वैल्यू, प्रोटोक कार्रवाई पर प्रोग्रेस मैसेज के तौर पर सेट की जाएगी.
protoc_minimal_do_not_use

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

runtime

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

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

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

proto_toolchain

नियम का सोर्स देखें
proto_toolchain(name, aspect_hints, command_line, compatible_with, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, features, mnemonic, output_files, package_metadata, progress_message, proto_compiler, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

तर्क

विशेषताएं
name

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

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

command_line

स्ट्रिंग; डिफ़ॉल्ट वैल्यू "--descriptor_set_out=%s" है

mnemonic

स्ट्रिंग; डिफ़ॉल्ट वैल्यू "GenProtoDescriptorSet" है

output_files

स्ट्रिंग; डिफ़ॉल्ट वैल्यू "single" है

progress_message

स्ट्रिंग; डिफ़ॉल्ट वैल्यू "Generating Descriptor Set proto_library %{label}" है

proto_compiler

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