नियम
- cc_proto_library
 - java_lite_proto_library
 - java_proto_library
 - proto_library
 - py_proto_library
 - proto_lang_toolchain
 - proto_toolchain
 
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, option_deps, 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 होता है. यह उन मैसेज के लिए डिस्क्रिप्टर सेट होता है जिनके लिए नियम srcs. यह फ़ाइल, क्रम से लगाई गई 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
         | 
        
                     लेबल; डिफ़ॉल्ट वैल्यू   | 
      
          exports
         | 
        
                     लेबल की सूची; डिफ़ॉल्ट वैल्यू   | 
      
          import_prefix
         | 
        
                     स्ट्रिंग; डिफ़ॉल्ट वैल्यू  इस नियम के  इस प्रीफ़िक्स को जोड़ने से पहले,   | 
      
          option_deps
         | 
        
                     लेबल की सूची; डिफ़ॉल्ट वैल्यू  proto_library के अन्य नियमों की सूची, जो सिर्फ़ विकल्पों के लिए टारगेट पर निर्भर करती है.
कोई proto_library सिर्फ़ अन्य proto_library टारगेट पर निर्भर हो सकता है. यह भाषा के हिसाब से बनाई गई लाइब्रेरी पर निर्भर नहीं होना चाहिए.
         | 
      
          strip_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)
तर्क
| विशेषताएं | |
|---|---|
name | 
        
           नाम; ज़रूरी है इस टारगेट के लिए यूनीक नाम.  | 
      
          deps
         | 
        
                     लेबल की सूची; डिफ़ॉल्ट वैल्यू   | 
      
proto_lang_toolchain
नियम का सोर्स देखेंproto_lang_toolchain(name, allowlist_different_package, aspect_hints, blacklisted_protos, command_line, compatible_with, denylisted_protos, 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
         | 
        
                     लेबल; डिफ़ॉल्ट वैल्यू   | 
      
          blacklisted_protos
         | 
        
                     लेबल की सूची; डिफ़ॉल्ट वैल्यू  denylisted_protos के लिए उपनाम. आने वाले समय में रिलीज़ होने वाले वर्शन में इसे हटा दिया जाएगा.
         | 
      
          command_line
         | 
        
                     स्ट्रिंग; ज़रूरी है इस वैल्यू को कोड जनरेट करने के लिए, प्रोटो-कंपाइलर को पास किया जाएगा. सिर्फ़ उन हिस्सों को शामिल करें जो इस कोड-जनरेटर/प्लगिन के लिए खास हैं. उदाहरण के लिए, -I पैरामीटर शामिल न करें
  | 
      
          denylisted_protos
         | 
        
                     लेबल की सूची; डिफ़ॉल्ट वैल्यू  denylisted_protos एट्रिब्यूट की srcs एट्रिब्यूट वाली फ़ाइलों के लिए कोई कोड जनरेट नहीं किया जाएगा.
इसका इस्तेमाल उन .proto फ़ाइलों के लिए किया जाता है जो पहले से ही proto रनटाइम में लिंक की गई हैं. जैसे, any.proto.
         | 
      
          mnemonic
         | 
        
                     स्ट्रिंग; डिफ़ॉल्ट वैल्यू   | 
      
          output_files
         | 
        
                     स्ट्रिंग; डिफ़ॉल्ट वैल्यू  command_line में command_line को कैसे फ़ॉर्मैट किया जाए. इसके लिए, एक फ़ाइल का पाथ या एक से ज़्यादा फ़ाइलों के मामले में आउटपुट डायरेक्ट्री का इस्तेमाल किया जाता है.$(OUT)
इन वैल्यू का इस्तेमाल किया जा सकता है: "single", "multiple".
         | 
      
          plugin
         | 
        
                     लेबल; डिफ़ॉल्ट वैल्यू  --plugin=protoc-gen-PLUGIN=<executable>.
         | 
      
          plugin_format_flag
         | 
        
                     स्ट्रिंग; डिफ़ॉल्ट वैल्यू  --plugin=protoc-gen-PLUGIN=<executable>.
         | 
      
          progress_message
         | 
        
                     स्ट्रिंग; डिफ़ॉल्ट वैल्यू   | 
      
          protoc_minimal_do_not_use
         | 
        
                     लेबल; डिफ़ॉल्ट वैल्यू   | 
      
          runtime
         | 
        
                     लेबल; डिफ़ॉल्ट वैल्यू   | 
      
          toolchain_type
         | 
        
                     लेबल; डिफ़ॉल्ट वैल्यू   | 
      
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
         | 
        
                     स्ट्रिंग; डिफ़ॉल्ट वैल्यू   | 
      
          mnemonic
         | 
        
                     स्ट्रिंग; डिफ़ॉल्ट वैल्यू   | 
      
          output_files
         | 
        
                     स्ट्रिंग; डिफ़ॉल्ट वैल्यू   | 
      
          progress_message
         | 
        
                     स्ट्रिंग; डिफ़ॉल्ट वैल्यू   | 
      
          proto_compiler
         | 
        
                     लेबल; डिफ़ॉल्ट वैल्यू   |