प्रोटोबफ़ मॉड्यूल

बिल्ड सिस्टम rust_protobuf मॉड्यूल प्रकार के माध्यम से प्रोटोबफ इंटरफेस उत्पन्न करने का समर्थन करता है।

बेसिक प्रोटोबफ कोड जेनरेशन rust-protobuf क्रेट के साथ किया जाता है। इस उपयोग पर दस्तावेज़ देखने के लिए, संबंधित प्रोटोबफ़ उदाहरणों के साथ GitHub प्रोजेक्ट पृष्ठ देखें।

grpc-rs क्रेट द्वारा प्रदान की गई पीढ़ी के साथ, जीआरपीसी प्रोटोबफ भी समर्थित हैं। इस उपयोग पर दस्तावेज़ देखने के लिए, संबंधित gRPC GitHub प्रोजेक्ट पृष्ठ पर दस्तावेज़ देखें।

बुनियादी रस्ट_प्रोटोबफ़ बिल्ड उपयोग

निम्नलिखित एक प्रोटोबफ मॉड्यूल को परिभाषित करने और उस मॉड्यूल को क्रेट के रूप में उपयोग करने का एक उदाहरण प्रदान करता है। महत्वपूर्ण गुणों और उनका उपयोग कैसे किया जाता है, इसके बारे में अधिक विवरण एक rust_protobuf परिभाषित करना अनुभाग में हैं।

यदि आपको किसी include!() मैक्रो के माध्यम से प्रोटोबफ जेनरेटेड कोड का उपयोग करने की आवश्यकता है, जैसे कि तृतीय-पक्ष कोड के लिए, उदाहरण के लिए सोर्स जेनरेटर पेज देखें। (उदाहरण एक rust_bindgen मॉड्यूल का उपयोग करता है, लेकिन स्रोत समावेशन का साधन सभी स्रोत जनरेटर के लिए समान है।)

एकrust_protobuf Android.bp मॉड्यूल परिभाषित करें

अपने Android.bp के सापेक्ष src/protos/my.proto पर कुछ प्रोटो मानें; फिर मॉड्यूल को निम्नलिखित के रूप में परिभाषित किया गया है:

rust_protobuf {
    name: "libmy_proto",

    // Crate name that's used to generate the rust_library variants.
    crate_name: "my_proto",

    // Relative paths to the protobuf source files
    protos: ["src/protos/my.proto"],

    // If protobufs define gRPCs, then they should go in grpc_protos
    // instead.
    // grpc_protos: ["src/protos/my.proto"],

    // 'source_stem' controls the output filename.
    // This is the filename that's used in an include! macro.
    source_stem: "my_proto_source",
}

एक लाइब्रेरी जो इस क्रेट का उपयोग करती है उसे संदर्भित करके परिभाषित किया जाता है जैसे कि यह कोई अन्य लाइब्रेरी निर्भरता थी:

rust_binary {
    name: "hello_rust_proto",
    srcs: ["src/main.rs"],
    rustlibs: ["libmy_proto"],
}

rust_protobuf मॉड्यूल की क्रेट संरचना

प्रत्येक प्रोटोबफ़ फ़ाइल को प्रोटोबफ़ फ़ाइल का नाम लेते हुए, क्रेट के भीतर अपने स्वयं के मॉड्यूल के रूप में व्यवस्थित किया जाता है। इसका मतलब है कि सभी प्रोटो बेस फ़ाइल नाम अद्वितीय होने चाहिए। उदाहरण के लिए, एक rust_protobuf इस प्रकार परिभाषित करें:

rust_protobuf {
    name: "libfoo",
    crate_name: "foo",
    protos: ["a.proto", "b.proto"],
    grpc_protos: ["c.proto"],
    source_stem: "my_proto_source",
}

इस टोकरे के भीतर विभिन्न प्रोटो को निम्नानुसार एक्सेस किया जाएगा:

// use <crate_name>::<proto_filename>
use foo::a; // protobuf interface defined in a.proto
use foo::b; // protobuf interface defined in b.proto
use foo::c; // protobuf interface defined in c.proto
use foo::c_grpc; // grpc interface defined in c.proto

उल्लेखनीय रस्ट_प्रोटोबफ गुण

नीचे परिभाषित गुण उन महत्वपूर्ण सामान्य गुणों के अतिरिक्त हैं जो सभी मॉड्यूल पर लागू होते हैं। ये या तो रस्ट प्रोटोबफ मॉड्यूल के लिए विशेष रूप से महत्वपूर्ण हैं, या rust_protobuf मॉड्यूल प्रकार के लिए विशिष्ट अद्वितीय व्यवहार प्रदर्शित करते हैं।

तना, नाम, टोकरा_नाम

rust_protobuf लाइब्रेरी वेरिएंट का उत्पादन करता है, इसलिए इन तीन गुणों के लिए वही आवश्यकताएं मौजूद हैं जो कि rust_library मॉड्यूल के लिए हैं। विवरण के लिए rust_library गुण देखें।

प्रोटो

यह प्रोटोबफ़ इंटरफ़ेस उत्पन्न करने के लिए प्रोटोबफ़ फ़ाइलों के सापेक्ष पथों की एक सूची है। आधार फ़ाइल नाम protos और grpc_protos में अद्वितीय होने चाहिए।

grpc_protos

grpc_protos में प्रोटोबफ़ फ़ाइलों के सापेक्ष पथों की एक सूची होती है जो प्रोटोबफ़ इंटरफ़ेस उत्पन्न करने के लिए grpcs परिभाषित करती है। आधार फ़ाइल नाम protos और grpc_protos में अद्वितीय होना चाहिए।

source_stem

source_stem जेनरेट की गई स्रोत फ़ाइल का फ़ाइल नाम है जिसे शामिल किया जा सकता है। यह एक आवश्यक फ़ील्ड परिभाषा है, भले ही आप बाइंडिंग को क्रेट के रूप में उपयोग कर रहे हों, क्योंकि stem प्रॉपर्टी केवल जेनरेट किए गए लाइब्रेरी वेरिएंट के लिए आउटपुट फ़ाइल नाम को नियंत्रित करती है। अन्य स्रोत जनरेटर के विपरीत, फ़ाइल नाम के पहले mod_ जुड़ जाता है , जिससे अंतिम फ़ाइल नाम mod_<stem> बन जाता है। यह प्रत्येक प्रोटो से उत्पन्न स्रोतों के साथ नाम टकराव को रोकता है।

इसके अतिरिक्त, बाइंडजेन बाइंडिंग मॉड्यूल की तरह, लाइब्रेरी संकलन को नियंत्रित करने के लिए लाइब्रेरी गुणों का पूरा सेट भी उपलब्ध है, हालांकि इन्हें शायद ही कभी परिभाषित या बदलने की आवश्यकता होती है।