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

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

नियम

py_proto_library

नियम का सोर्स देखें
py_proto_library(name, deps, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
`.proto` फ़ाइलों से Python लाइब्रेरी जनरेट करने के लिए, `py_proto_library` का इस्तेमाल करें. `py_proto_library` नियम को `foo_py_pb2` नाम दिया जाता है, जब वह `proto_library` नियम `foo_proto` को रैप कर रहा हो. `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, 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)

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

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

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

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

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

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

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

यह वैल्यू, protoc ऐक्शन पर मेनिमोनिक के तौर पर सेट की जाएगी.
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}"

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

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

runtime

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

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

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

proto_toolchain

नियम का सोर्स देखें
proto_toolchain(name, command_line, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, mnemonic, output_files, 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 है