當前位置: 首頁>>代碼示例>>Golang>>正文


Golang FieldDescriptorProto.WireType方法代碼示例

本文整理匯總了Golang中limbo/services/protobuf/protoc-gen-gogo/descriptor.FieldDescriptorProto.WireType方法的典型用法代碼示例。如果您正苦於以下問題:Golang FieldDescriptorProto.WireType方法的具體用法?Golang FieldDescriptorProto.WireType怎麽用?Golang FieldDescriptorProto.WireType使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在limbo/services/protobuf/protoc-gen-gogo/descriptor.FieldDescriptorProto的用法示例。


在下文中一共展示了FieldDescriptorProto.WireType方法的1個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。

示例1: generateField

func (p *marshalto) generateField(proto3 bool, numGen NumGen, file *generator.FileDescriptor, message *generator.Descriptor, field *descriptor.FieldDescriptorProto) {
    fieldname := p.GetOneOfFieldName(message, field)
    nullable := gogoproto.IsNullable(field)
    repeated := field.IsRepeated()
    required := field.IsRequired()

    protoSizer := gogoproto.IsProtoSizer(file.FileDescriptorProto, message.DescriptorProto)
    doNilCheck := gogoproto.NeedsNilCheck(proto3, field)
    if required && nullable {
        p.P(`if m.`, fieldname, `== nil {`)
        p.In()
        if !gogoproto.ImportsGoGoProto(file.FileDescriptorProto) {
            p.P(`return 0, new(`, p.protoPkg.Use(), `.RequiredNotSetError)`)
        } else {
            p.P(`return 0, `, p.protoPkg.Use(), `.NewRequiredNotSetError("`, field.GetName(), `")`)
        }
        p.Out()
        p.P(`} else {`)
    } else if repeated {
        p.P(`if len(m.`, fieldname, `) > 0 {`)
        p.In()
    } else if doNilCheck {
        p.P(`if m.`, fieldname, ` != nil {`)
        p.In()
    }
    packed := field.IsPacked()
    wireType := field.WireType()
    fieldNumber := field.GetNumber()
    if packed {
        wireType = proto.WireBytes
    }
    switch *field.Type {
    case descriptor.FieldDescriptorProto_TYPE_DOUBLE:
        if !p.unsafe || gogoproto.IsCastType(field) {
            if packed {
                p.encodeKey(fieldNumber, wireType)
                p.callVarint(`len(m.`, fieldname, `) * 8`)
                p.P(`for _, num := range m.`, fieldname, ` {`)
                p.In()
                p.P(`f`, numGen.Next(), ` := `, p.mathPkg.Use(), `.Float64bits(float64(num))`)
                p.encodeFixed64("f" + numGen.Current())
                p.Out()
                p.P(`}`)
            } else if repeated {
                p.P(`for _, num := range m.`, fieldname, ` {`)
                p.In()
                p.encodeKey(fieldNumber, wireType)
                p.P(`f`, numGen.Next(), ` := `, p.mathPkg.Use(), `.Float64bits(float64(num))`)
                p.encodeFixed64("f" + numGen.Current())
                p.Out()
                p.P(`}`)
            } else if proto3 {
                p.P(`if m.`, fieldname, ` != 0 {`)
                p.In()
                p.encodeKey(fieldNumber, wireType)
                p.callFixed64(p.mathPkg.Use(), `.Float64bits(float64(m.`+fieldname, `))`)
                p.Out()
                p.P(`}`)
            } else if !nullable {
                p.encodeKey(fieldNumber, wireType)
                p.callFixed64(p.mathPkg.Use(), `.Float64bits(float64(m.`+fieldname, `))`)
            } else {
                p.encodeKey(fieldNumber, wireType)
                p.callFixed64(p.mathPkg.Use(), `.Float64bits(float64(*m.`+fieldname, `))`)
            }
        } else {
            if packed {
                p.encodeKey(fieldNumber, wireType)
                p.callVarint(`len(m.`, fieldname, `) * 8`)
                p.P(`for _, num := range m.`, fieldname, ` {`)
                p.In()
                p.unsafeFixed64("num", "float64")
                p.Out()
                p.P(`}`)
            } else if repeated {
                p.P(`for _, num := range m.`, fieldname, ` {`)
                p.In()
                p.encodeKey(fieldNumber, wireType)
                p.unsafeFixed64("num", "float64")
                p.Out()
                p.P(`}`)
            } else if proto3 {
                p.P(`if m.`, fieldname, ` != 0 {`)
                p.In()
                p.encodeKey(fieldNumber, wireType)
                p.unsafeFixed64(`m.`+fieldname, "float64")
                p.Out()
                p.P(`}`)
            } else if !nullable {
                p.encodeKey(fieldNumber, wireType)
                p.unsafeFixed64(`m.`+fieldname, "float64")
            } else {
                p.encodeKey(fieldNumber, wireType)
                p.unsafeFixed64(`*m.`+fieldname, `float64`)
            }
        }
    case descriptor.FieldDescriptorProto_TYPE_FLOAT:
        if !p.unsafe || gogoproto.IsCastType(field) {
            if packed {
                p.encodeKey(fieldNumber, wireType)
//.........這裏部分代碼省略.........
開發者ID:limbo-services,項目名稱:protobuf,代碼行數:101,代碼來源:marshalto.go


注:本文中的limbo/services/protobuf/protoc-gen-gogo/descriptor.FieldDescriptorProto.WireType方法示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。