پروتوباف encoding/protobuf
خواندن پروندههای .proto، کدگذاری سیمی Protocol Buffers و ساختن کد سلام از آنها.
واردسازی کدگذاری.پروتوباف
Protocol Buffers قالب دودویی گوگل برای پیامهای ساختارمند است. شکل پیامها در پروندهی .proto تعریف میشود و این بسته آن را میخواند، کد سلام برای پیامها و سرویسها میسازد و ابزار سطح پایین نوشتن و خواندن فیلدها را هم دارد.
هر فیلد در بایتها با یک برچسب (شمارهی فیلد و نوع سیم) و سپس مقدارش میآید. عددها معمولاً varint نوشته میشوند: هر بایت ۷ بیت از عدد را دارد و بیت بالایش میگوید بایت دیگری هم هست.
گونهها
جریان نشانه پروتو PTokenStream
ساختار جریان نشانه پروتو| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| toks | toks | وکتور<نشانه پروتو> | نشانهها. |
واردسازی کدگذاری.پروتوباف
روال ریشه:
منبع := "syntax = \"proto3\";\npackage shop;\n\nenum Status { OPEN = 0; DONE = 1; }\n\nmessage Order {\n int64 id = 1;\n repeated string items = 2;\n map<string, int32> counts = 3;\n Status status = 4;\n oneof pay { string card = 5; bool cash = 6; }\n}\n\nservice Orders {\n rpc Get (Order) returns (Order);\n rpc Watch (Order) returns (stream Order);\n}\n"
ناپایا خوب := نادرست
پ := پروتوباف.تجزیه پرونده(منبع، خوب)
سرچاپ خوب، پ.packageName، پ.messages.طول()، پ.enums.طول()، پ.services.طول()، پ.imports.طول()
پیام := پ.messages[۰]
سرچاپ پیام.name، پیام.fields.طول()، پیام.oneofs[۰].name، پیام.oneofs[۰].fieldIndices
هر ف در پیام.fields:
سرچاپ ف.number، ف.name، پروتوباف.نام نوع فیلد(ف.kind)، ف.typeName، ف.repeated، ف.oneofIndex
پایان
م := پیام.fields[۲]
سرچاپ م.kind == پروتوباف.نوع فیلد نگاشت، پروتوباف.نام نوع فیلد(م.keyKind)، پروتوباف.نام نوع فیلد(م.mapValueKind)
ش := پ.enums[۰]
سرچاپ ش.name، ش.values[۱].name، ش.values[۱].number
س := پ.services[۰]
سرچاپ س.name، س.methods[۱].name، س.methods[۱].inputType، س.methods[۱].serverStream، س.methods[۱].clientStream
سرچاپ پروتوباف.نوع ساده از نام("sint64") == پروتوباف.نوع فیلد صحیح۶۴ زیگزاگ، پروتوباف.نوع ساده از نام("Order")
ناپایا ن := پروتوباف.نشانه گذاری("message A { int32 x = 1; }"، خوب)
سرچاپ خوب، ن.toks.طول()، ن.toks[۰].lexeme، ن.toks[۰].kind == پروتوباف.نشانه شناسه، ن.toks[۲].kind == پروتوباف.نشانه آکولاد باز
سرچاپ ن.toks[۶].ival، ن.toks[۶].line
_ := پروتوباف.تجزیه پرونده("message {"، خوب)
سرچاپ خوب
پایانفیلد پروتو PField
ساختار فیلد پروتو| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| name | name | رشته = "" | نام. |
| kind | kind | صحیح = 0 | نوع فیلد؛ یکی از ثابتهای نوع فیلد. |
| typeName | typeName | رشته = "" | نام گونه برای پیام و شمارشی. تجزیهگر نامها را حل نمیکند، پس شمارشی هم نوع پیام میگیرد. |
| keyKind | keyKind | صحیح = 0 | نوع کلید برای map. |
| mapValueKind | mapValueKind | صحیح = 0 | نوع مقدار برای map. |
| mapValueTypeName | mapValueTypeName | رشته = "" | نام گونهی مقدار map. |
| number | number | صحیح = 0 | شمارهی فیلد. |
| repeated | repeated | منطقی = نادرست | فیلد تکرارشونده است. |
| packedOpt | packedOpt | منطقی = درست | عددهای تکراری فشرده نوشته شوند. |
| oneofIndex | oneofIndex | صحیح = -1 | شمارهی گروه oneof؛ -1 اگر نباشد. |
| is_deprecated | is_deprecated | منطقی = نادرست | فیلد منسوخ علامت خورده. |
نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-protobuf-Parse.salam
گروه یکی از POneof
ساختار گروه یکی ازoneof: از میان فیلدهایش فقط یکی مقدار دارد.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| name | name | رشته = "" | نام. |
| fieldIndices | fieldIndices | وکتور<صحیح> | شمارهی فیلدهای عضو در پیام. |
نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-protobuf-Parse.salam
مقدار شمارشی پروتو PEnumValue
ساختار مقدار شمارشی پروتو| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| name | name | رشته = "" | نام. |
| number | number | صحیح = 0 | عدد. |
نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-protobuf-Parse.salam
شمارشی پروتو PEnum
ساختار شمارشی پروتو| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| name | name | رشته = "" | نام. |
| values | values | وکتور<مقدار شمارشی پروتو> | مقدارها. |
نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-protobuf-Parse.salam
پیام پروتو PMessage
ساختار پیام پروتو| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| name | name | رشته = "" | نام. |
| fields | fields | وکتور<فیلد پروتو> | فیلدها به ترتیب تعریف. |
| oneofs | oneofs | وکتور<گروه یکی از> | گروههای oneof. |
| nestedMessages | nestedMessages | وکتور<پیام پروتو> | پیامهای درونی. |
| nestedEnums | nestedEnums | وکتور<شمارشی پروتو> | شمارشیهای درونی. |
نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-protobuf-Parse.salam
متد پروتو PMethod
ساختار متد پروتو| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| name | name | رشته = "" | نام. |
| inputType | inputType | رشته = "" | گونهی ورودی. |
| outputType | outputType | رشته = "" | گونهی خروجی. |
| clientStream | clientStream | منطقی = نادرست | ورودی جریانی است. |
| serverStream | serverStream | منطقی = نادرست | خروجی جریانی است. |
نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-protobuf-Parse.salam
سرویس پروتو PService
ساختار سرویس پروتو| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| name | name | رشته = "" | نام. |
| methods | methods | وکتور<متد پروتو> | متدها. |
نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-protobuf-Parse.salam
پرونده پروتو PFile
ساختار پرونده پروتو.proto خواندهشده.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| packageName | packageName | رشته = "" | نام بسته. |
| messages | messages | وکتور<پیام پروتو> | پیامها. |
| enums | enums | وکتور<شمارشی پروتو> | شمارشیهای سطح بالا. |
| imports | imports | وکتور<رشته> | پروندههای واردشده. |
| services | services | وکتور<سرویس پروتو> | سرویسها. |
نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-protobuf-Parse.salam
نشانه پروتو PToken
ساختار نشانه پروتو| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| kind | kind | صحیح | نوع نشانه. |
| lexeme | lexeme | رشته = "" | متن نشانه. |
| ival | ival | صحیح۶۴ = 0 | مقدار عدد صحیح. |
| fval | fval | اعشار۶۴ = 0 | مقدار عدد اعشاری. |
| sval | sval | رشته = "" | مقدار رشته. |
| line | line | صحیح = 0 | شمارهی خط. |
نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-protobuf-Parse.salam
پایاها و متغیرها
نوع سیم WT_…
| نام | انگلیسی | مقدار |
|---|---|---|
| نوع سیم متغیر | WT_VARINT | 0 |
| نوع سیم ثابت۶۴ | WT_FIXED64 | 1 |
| نوع سیم طولدار | WT_LEN | 2 |
| نوع سیم ثابت۳۲ | WT_FIXED32 | 5 |
واردسازی کدگذاری.پروتوباف
واردسازی فشرده سازی
روال ریشه:
ناپایا ب := فشرده سازی.بافر بایت جدید()
پروتوباف.نوشتن برچسب(ب، ۱، پروتوباف.نوع سیم متغیر)
پروتوباف.نوشتن عدد متغیر(ب، ۱۵۰ برگردان طبیعی۶۴)
سرچاپ فشرده سازی.بافر به پایه۶۴(ب)، پروتوباف.ساخت برچسب(۱، ۰)، پروتوباف.ساخت برچسب(۲، پروتوباف.نوع سیم طولدار)
پروتوباف.نوشتن برچسب(ب، ۲، پروتوباف.نوع سیم طولدار)
پروتوباف.نوشتن رشته طولدار(ب، "سلام")
پروتوباف.نوشتن برچسب(ب، ۳، پروتوباف.نوع سیم ثابت۳۲)
پروتوباف.نوشتن ثابت۳۲(ب، ۷ برگردان طبیعی۳۲)
پروتوباف.نوشتن برچسب(ب، ۴، پروتوباف.نوع سیم ثابت۶۴)
پروتوباف.نوشتن ثابت۶۴(ب، ۹ برگردان طبیعی۶۴)
پروتوباف.نوشتن اعشار۳۲(ب، ۰.۵)
پروتوباف.نوشتن اعشار۶۴(ب، ۲.۲۵)
پروتوباف.نوشتن بایتهای طولدار(ب، ب.data، ۲)
ناپایا خ := فشرده سازی.خواننده از بافر(ب)
ناپایا سالم := درست
ناپایا شماره := ۰
ناپایا سیم := ۰
پروتوباف.خواندن برچسب(خ، شماره، سیم، سالم)
سرچاپ شماره، سیم، پروتوباف.خواندن عدد متغیر(خ، سالم)
پروتوباف.خواندن برچسب(خ، شماره، سیم، سالم)
سرچاپ شماره، پروتوباف.خواندن رشته طولدار(خ، سالم)
پروتوباف.خواندن برچسب(خ، شماره، سیم، سالم)
پروتوباف.رد کردن فیلد(خ، سیم، سالم)
پروتوباف.خواندن برچسب(خ، شماره، سیم، سالم)
سرچاپ شماره، پروتوباف.خواندن ثابت۶۴(خ، سالم)
سرچاپ پروتوباف.خواندن اعشار۳۲(خ، سالم)، پروتوباف.خواندن اعشار۶۴(خ، سالم)
ب۲ := پروتوباف.خواندن بافر طولدار(خ، سالم)
سرچاپ فشرده سازی.طول بافر(ب۲)، سالم
_ := پروتوباف.خواندن عدد متغیر(خ، سالم)
سرچاپ سالم
سرچاپ پروتوباف.کدگذاری زیگزاگ۳۲(-۱)، پروتوباف.کدگشایی زیگزاگ۳۲(۳ برگردان طبیعی۳۲)، پروتوباف.کدگذاری زیگزاگ۶۴(-۲)، پروتوباف.کدگشایی زیگزاگ۶۴(۴ برگردان طبیعی۶۴)
ناپایا ب۳ := فشرده سازی.بافر بایت جدید()
پروتوباف.نوشتن ثابت۳۲(ب۳، ۴۲ برگردان طبیعی۳۲)
ناپایا خ۳ := فشرده سازی.خواننده از بافر(ب۳)
سالم = درست
سرچاپ پروتوباف.خواندن ثابت۳۲(خ۳، سالم)
فشرده سازی.آزادسازی بافر(ب)
فشرده سازی.آزادسازی بافر(ب۳)
پایاننوع فیلدها FK_…
kind هر فیلد: گونههای سادهی پروتوباف، پیام، شمارشی و نگاشت.| نام | انگلیسی | مقدار |
|---|---|---|
| نوع فیلد اعشار۶۴ | FK_DOUBLE | 1 |
| نوع فیلد اعشار۳۲ | FK_FLOAT | 2 |
| نوع فیلد صحیح۳۲ | FK_INT32 | 3 |
| نوع فیلد صحیح۶۴ | FK_INT64 | 4 |
| نوع فیلد طبیعی۳۲ | FK_UINT32 | 5 |
| نوع فیلد طبیعی۶۴ | FK_UINT64 | 6 |
| نوع فیلد صحیح۳۲ زیگزاگ | FK_SINT32 | 7 |
| نوع فیلد صحیح۶۴ زیگزاگ | FK_SINT64 | 8 |
| نوع فیلد ثابت۳۲ | FK_FIXED32 | 9 |
| نوع فیلد ثابت۶۴ | FK_FIXED64 | 10 |
| نوع فیلد ثابت علامتدار۳۲ | FK_SFIXED32 | 11 |
| نوع فیلد ثابت علامتدار۶۴ | FK_SFIXED64 | 12 |
| نوع فیلد منطقی | FK_BOOL | 13 |
| نوع فیلد رشته | FK_STRING | 14 |
| نوع فیلد بایتها | FK_BYTES | 15 |
| نوع فیلد پیام | FK_MESSAGE | 16 |
| نوع فیلد شمارشی | FK_ENUM | 17 |
| نوع فیلد نگاشت | FK_MAP | 18 |
نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-protobuf-Parse.salam
نوع نشانهها PTK_…
kind نشانههای نشانه گذاری.| نام | انگلیسی | مقدار |
|---|---|---|
| نشانه اتمام | PTK_EOF | 0 |
| نشانه شناسه | PTK_IDENT | 1 |
| نشانه عدد صحیح | PTK_INT | 2 |
| نشانه عدد اعشاری | PTK_FLOAT | 3 |
| نشانه رشته | PTK_STRING | 4 |
| نشانه نقطهویرگول | PTK_SEMI | 5 |
| نشانه آکولاد باز | PTK_LBRACE | 6 |
| نشانه آکولاد بسته | PTK_RBRACE | 7 |
| نشانه پرانتز باز | PTK_LPAREN | 8 |
| نشانه پرانتز بسته | PTK_RPAREN | 9 |
| نشانه کروشه باز | PTK_LBRACKET | 10 |
| نشانه کروشه بسته | PTK_RBRACKET | 11 |
| نشانه زاویه باز | PTK_LANGLE | 12 |
| نشانه زاویه بسته | PTK_RANGLE | 13 |
| نشانه مساوی | PTK_EQ | 14 |
| نشانه ویرگول | PTK_COMMA | 15 |
| نشانه نقطه | PTK_DOT | 16 |
| نشانه منها | PTK_MINUS | 17 |
| نشانه خطا | PTK_ERROR | 18 |
نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-protobuf-Parse.salam
روالها
تجزیه پرونده ParseFile
روال تجزیه پرونده(source: رشته، ok &: منطقی): پرونده پروتو.proto (نحو proto3) را میخواند.نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-protobuf-Parse.salam
ساخت برچسب MakeTag
روال ساخت برچسب(fieldNum: صحیح، wireType: صحیح): طبیعی۶۴نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-protobuf-Wire.salam
نوشتن عدد متغیر WriteVarint
روال نوشتن عدد متغیر(buf &: compress.ByteBuf، n: طبیعی۶۴)نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-protobuf-Wire.salam
خواندن عدد متغیر ReadVarint
روال خواندن عدد متغیر(r &: compress.ByteReader، ok &: منطقی): طبیعی۶۴نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-protobuf-Wire.salam
نوشتن برچسب WriteTag
روال نوشتن برچسب(buf &: compress.ByteBuf، fieldNum: صحیح، wireType: صحیح)نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-protobuf-Wire.salam
خواندن برچسب ReadTag
روال خواندن برچسب(r &: compress.ByteReader، fieldNum &: صحیح، wireType &: صحیح، ok &: منطقی)نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-protobuf-Wire.salam
کدگذاری زیگزاگ۳۲ ZigZagEncode32
روال کدگذاری زیگزاگ۳۲(n: صحیح۳۲): طبیعی۳۲نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-protobuf-Wire.salam
کدگشایی زیگزاگ۳۲ ZigZagDecode32
روال کدگشایی زیگزاگ۳۲(n: طبیعی۳۲): صحیح۳۲نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-protobuf-Wire.salam
کدگذاری زیگزاگ۶۴ ZigZagEncode64
روال کدگذاری زیگزاگ۶۴(n: صحیح۶۴): طبیعی۶۴نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-protobuf-Wire.salam
کدگشایی زیگزاگ۶۴ ZigZagDecode64
روال کدگشایی زیگزاگ۶۴(n: طبیعی۶۴): صحیح۶۴نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-protobuf-Wire.salam
نوشتن ثابت۳۲ WriteFixed32
روال نوشتن ثابت۳۲(buf &: compress.ByteBuf، v: طبیعی۳۲)نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-protobuf-Wire.salam
خواندن ثابت۳۲ ReadFixed32
روال خواندن ثابت۳۲(r &: compress.ByteReader، ok &: منطقی): طبیعی۳۲نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-protobuf-Wire.salam
نوشتن ثابت۶۴ WriteFixed64
روال نوشتن ثابت۶۴(buf &: compress.ByteBuf، v: طبیعی۶۴)نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-protobuf-Wire.salam
خواندن ثابت۶۴ ReadFixed64
روال خواندن ثابت۶۴(r &: compress.ByteReader، ok &: منطقی): طبیعی۶۴نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-protobuf-Wire.salam
نوشتن اعشار۳۲ WriteFloat
روال نوشتن اعشار۳۲(buf &: compress.ByteBuf، v: اعشار۶۴)نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-protobuf-Wire.salam
خواندن اعشار۳۲ ReadFloat
روال خواندن اعشار۳۲(r &: compress.ByteReader، ok &: منطقی): اعشار۶۴نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-protobuf-Wire.salam
نوشتن اعشار۶۴ WriteDouble
روال نوشتن اعشار۶۴(buf &: compress.ByteBuf، v: اعشار۶۴)نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-protobuf-Wire.salam
خواندن اعشار۶۴ ReadDouble
روال خواندن اعشار۶۴(r &: compress.ByteReader، ok &: منطقی): اعشار۶۴نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-protobuf-Wire.salam
نوشتن بایتهای طولدار WriteLenPrefixedBytes
روال نوشتن بایتهای طولدار(buf &: compress.ByteBuf، p: تهی*، n: صحیح)نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-protobuf-Wire.salam
نوشتن رشته طولدار WriteLenPrefixedStr
روال نوشتن رشته طولدار(buf &: compress.ByteBuf، s: رشته)نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-protobuf-Wire.salam
خواندن بافر طولدار ReadLenPrefixedBuf
روال خواندن بافر طولدار(r &: compress.ByteReader، ok &: منطقی): compress.ByteBufنمونهی این مورد همراه با موارد بالاتر آمده است: encoding-protobuf-Wire.salam
خواندن رشته طولدار ReadLenPrefixedStr
روال خواندن رشته طولدار(r &: compress.ByteReader، ok &: منطقی): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: encoding-protobuf-Wire.salam
رد کردن فیلد SkipField
روال رد کردن فیلد(r &: compress.ByteReader، wireType: صحیح، ok &: منطقی)نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-protobuf-Wire.salam
نشانه گذاری Tokenize
روال نشانه گذاری(source: رشته، ok &: منطقی): جریان نشانه پروتونمونهی این مورد همراه با موارد بالاتر آمده است: encoding-protobuf-Parse.salam
تولید کد GenerateSingle
روال تولید کد(protoSource: رشته، ok &: منطقی): رشته.proto کد سلام میسازد: یک ساختار برای هر پیام، با روالهای سریالسازی.واردسازی کدگذاری.پروتوباف
واردسازی رشته
روال ریشه:
منبع := "syntax = \"proto3\";\nmessage Ping { string text = 1; }\nservice Echo {\n rpc Say (Ping) returns (Ping);\n rpc Stream (stream Ping) returns (stream Ping);\n}\n"
ناپایا خوب := نادرست
کد := پروتوباف.تولید کد(منبع، خوب)
سرچاپ خوب، رشته.شامل است(کد، "struct Ping")
پ := پروتوباف.تجزیه پرونده(منبع، خوب)
سرچاپ پروتوباف.تعداد سرویسها(پ)، پروتوباف.نام سرویس(پ، ۰)، پروتوباف.تعداد متدهای سرویس(پ، ۰)
سرچاپ پروتوباف.امضای متد(پ، ۰، ۰)
سرچاپ پروتوباف.امضای متد(پ، ۰، ۱)
سرچاپ رشته.شامل است(پروتوباف.تولید سرویسها(پ)، "Echo")
همه := پروتوباف.تولید با سرویسها(منبع، خوب)
سرچاپ خوب، رشته.طول(همه) > رشته.طول(کد)
سرچاپ پروتوباف.خلاصه سرویس(منبع، خوب)
پایاننام نوع فیلد FieldKindName
روال نام نوع فیلد(k: صحیح): رشتهint64.نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-protobuf-Parse.salam
نوع ساده از نام ScalarKindFromName
روال نوع ساده از نام(name: رشته): صحیحنمونهی این مورد همراه با موارد بالاتر آمده است: encoding-protobuf-Parse.salam
تعداد سرویسها ServiceCount
روال تعداد سرویسها(f: پرونده پروتو): صحیحنمونهی این مورد همراه با موارد بالاتر آمده است: encoding-protobuf-Generate.salam
نام سرویس ServiceNameAt
روال نام سرویس(f: پرونده پروتو، i: صحیح): رشتهi.نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-protobuf-Generate.salam
تعداد متدهای سرویس ServiceMethodCount
روال تعداد متدهای سرویس(f: پرونده پروتو، i: صحیح): صحیحنمونهی این مورد همراه با موارد بالاتر آمده است: encoding-protobuf-Generate.salam
امضای متد ServiceMethodSignature
روال امضای متد(f: پرونده پروتو، si: صحیح، mi: صحیح): رشتهSay(Ping) returns (Ping).نمونهی این مورد همراه با موارد بالاتر آمده است: encoding-protobuf-Generate.salam
تولید سرویسها GenerateServices
روال تولید سرویسها(f: پرونده پروتو): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: encoding-protobuf-Generate.salam
تولید با سرویسها GenerateWithServices
روال تولید با سرویسها(protoSource: رشته، ok &: منطقی): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: encoding-protobuf-Generate.salam
خلاصه سرویس ServiceSummary
روال خلاصه سرویس(protoSource: رشته، ok &: منطقی): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: encoding-protobuf-Generate.salam