vendor protobuf & grpc

Signed-off-by: Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp>
This commit is contained in:
Akihiro Suda
2020-02-25 14:27:11 +09:00
parent 9b4967bd6b
commit 8e448bb279
158 changed files with 12967 additions and 10634 deletions

View File

@@ -425,11 +425,65 @@ func (p *plugin) generateMessage(file *generator.FileDescriptor, message *genera
p.In()
p.P(`return -1`)
p.Out()
p.P(`} else if c := this.`, fieldname, `.Compare(that1.`, fieldname, `); c != 0 {`)
p.P(`} else {`)
p.In()
// Generate two type switches in order to compare the
// types of the oneofs. If they are of the same type
// call Compare, otherwise return 1 or -1.
p.P(`thisType := -1`)
p.P(`switch this.`, fieldname, `.(type) {`)
for i, subfield := range message.Field {
if *subfield.OneofIndex == *field.OneofIndex {
ccTypeName := p.OneOfTypeName(message, subfield)
p.P(`case *`, ccTypeName, `:`)
p.In()
p.P(`thisType = `, i)
p.Out()
}
}
p.P(`default:`)
p.In()
p.P(`panic(fmt.Sprintf("compare: unexpected type %T in oneof", this.`, fieldname, `))`)
p.Out()
p.P(`}`)
p.P(`that1Type := -1`)
p.P(`switch that1.`, fieldname, `.(type) {`)
for i, subfield := range message.Field {
if *subfield.OneofIndex == *field.OneofIndex {
ccTypeName := p.OneOfTypeName(message, subfield)
p.P(`case *`, ccTypeName, `:`)
p.In()
p.P(`that1Type = `, i)
p.Out()
}
}
p.P(`default:`)
p.In()
p.P(`panic(fmt.Sprintf("compare: unexpected type %T in oneof", that1.`, fieldname, `))`)
p.Out()
p.P(`}`)
p.P(`if thisType == that1Type {`)
p.In()
p.P(`if c := this.`, fieldname, `.Compare(that1.`, fieldname, `); c != 0 {`)
p.In()
p.P(`return c`)
p.Out()
p.P(`}`)
p.Out()
p.P(`} else if thisType < that1Type {`)
p.In()
p.P(`return -1`)
p.Out()
p.P(`} else if thisType > that1Type {`)
p.In()
p.P(`return 1`)
p.Out()
p.P(`}`)
p.Out()
p.P(`}`)
} else {
p.generateField(file, message, field)
}

View File

@@ -238,10 +238,10 @@ func (p *gostring) Generate(file *generator.FileDescriptor) {
} else {
goTyp, _ := p.GoType(message, field)
goTyp = strings.Replace(goTyp, "[]", "", 1)
p.P("vs := make([]*", goTyp, ", len(this.", fieldname, "))")
p.P("vs := make([]", goTyp, ", len(this.", fieldname, "))")
p.P("for i := range vs {")
p.In()
p.P("vs[i] = &this.", fieldname, "[i]")
p.P("vs[i] = this.", fieldname, "[i]")
p.Out()
p.P("}")
p.P(`s = append(s, "`, fieldname, `: " + `, fmtPkg.Use(), `.Sprintf("%#v", vs) + ",\n")`)

File diff suppressed because it is too large Load Diff

View File

@@ -584,9 +584,9 @@ func (p *plugin) Generate(file *generator.FileDescriptor) {
p.GenerateField(file, message, field)
} else {
if loopLevels[fieldIndex] > 0 {
p.P(`if r.Intn(10) == 0 {`)
p.P(`if r.Intn(5) == 0 {`)
} else {
p.P(`if r.Intn(10) != 0 {`)
p.P(`if r.Intn(5) != 0 {`)
}
p.In()
p.GenerateField(file, message, field)

View File

@@ -141,6 +141,7 @@ type size struct {
atleastOne bool
localName string
typesPkg generator.Single
bitsPkg generator.Single
}
func NewSize() *size {
@@ -188,14 +189,7 @@ func keySize(fieldNumber int32, wireType int) int {
func (p *size) sizeVarint() {
p.P(`
func sov`, p.localName, `(x uint64) (n int) {
for {
n++
x >>= 7
if x == 0 {
break
}
}
return n
return (`, p.bitsPkg.Use(), `.Len64(x | 1) + 6)/ 7
}`)
}
@@ -589,6 +583,7 @@ func (p *size) Generate(file *generator.FileDescriptor) {
p.localName = generator.FileName(file)
p.typesPkg = p.NewImport("github.com/gogo/protobuf/types")
protoPkg := p.NewImport("github.com/gogo/protobuf/proto")
p.bitsPkg = p.NewImport("math/bits")
if !gogoproto.ImportsGoGoProto(file.FileDescriptorProto) {
protoPkg = p.NewImport("github.com/golang/protobuf/proto")
}

View File

@@ -148,6 +148,47 @@ func (p *stringer) Generate(file *generator.FileDescriptor) {
p.P(`return "nil"`)
p.Out()
p.P(`}`)
for _, field := range message.Field {
if p.IsMap(field) || !field.IsRepeated() {
continue
}
if (field.IsMessage() && !gogoproto.IsCustomType(field)) || p.IsGroup(field) {
nullable := gogoproto.IsNullable(field)
desc := p.ObjectNamed(field.GetTypeName())
msgname := p.TypeName(desc)
msgnames := strings.Split(msgname, ".")
typeName := msgnames[len(msgnames)-1]
fieldMessageDesc := file.GetMessage(msgname)
gogoStringer := false
if fieldMessageDesc != nil {
gogoStringer = gogoproto.IsStringer(file.FileDescriptorProto, fieldMessageDesc)
}
fieldname := p.GetFieldName(message, field)
stringfunc := fmtPkg.Use() + `.Sprintf("%v", f)`
if gogoStringer {
stringfunc = `f.String()`
}
repeatedName := `repeatedStringFor` + fieldname
if nullable {
p.P(repeatedName, ` := "[]*`, typeName, `{"`)
} else {
p.P(repeatedName, ` := "[]`, typeName, `{"`)
}
p.P(`for _, f := range `, `this.`, fieldname, ` {`)
p.In()
if nullable {
p.P(repeatedName, " += ", stringsPkg.Use(), `.Replace(`, stringfunc, `, "`, typeName, `","`, msgname, `"`, ", 1)", ` + ","`)
} else if gogoStringer {
p.P(repeatedName, " += ", stringsPkg.Use(), `.Replace(`, stringsPkg.Use(), `.Replace(`, stringfunc, `, "`, typeName, `","`, msgname, `"`, ", 1),`&`,``,1)", ` + ","`)
} else {
p.P(repeatedName, " += ", stringfunc, ` + ","`)
}
p.Out()
p.P(`}`)
p.P(repeatedName, ` += "}"`)
}
}
for _, field := range message.Field {
if !p.IsMap(field) {
continue
@@ -208,12 +249,22 @@ func (p *stringer) Generate(file *generator.FileDescriptor) {
msgname := p.TypeName(desc)
msgnames := strings.Split(msgname, ".")
typeName := msgnames[len(msgnames)-1]
if nullable {
p.P("`", fieldname, ":`", ` + `, stringsPkg.Use(), `.Replace(`, fmtPkg.Use(), `.Sprintf("%v", this.`, fieldname, `), "`, typeName, `","`, msgname, `"`, ", 1) + `,", "`,")
fieldMessageDesc := file.GetMessage(msgname)
gogoStringer := false
if fieldMessageDesc != nil {
gogoStringer = gogoproto.IsStringer(file.FileDescriptorProto, fieldMessageDesc)
}
stringfunc := fmtPkg.Use() + `.Sprintf("%v", this.` + fieldname + `)`
if gogoStringer {
stringfunc = `this.` + fieldname + `.String()`
}
if nullable && !repeated {
p.P("`", fieldname, ":`", ` + `, stringsPkg.Use(), `.Replace(`, stringfunc, `, "`, typeName, `","`, msgname, `"`, ", 1) + `,", "`,")
} else if repeated {
p.P("`", fieldname, ":`", ` + `, stringsPkg.Use(), `.Replace(`, stringsPkg.Use(), `.Replace(`, fmtPkg.Use(), `.Sprintf("%v", this.`, fieldname, `), "`, typeName, `","`, msgname, `"`, ", 1),`&`,``,1) + `,", "`,")
repeatedName := `repeatedStringFor` + fieldname
p.P("`", fieldname, ":`", ` + `, repeatedName, " + `,", "`,")
} else {
p.P("`", fieldname, ":`", ` + `, stringsPkg.Use(), `.Replace(`, stringsPkg.Use(), `.Replace(this.`, fieldname, `.String(), "`, typeName, `","`, msgname, `"`, ", 1),`&`,``,1) + `,", "`,")
p.P("`", fieldname, ":`", ` + `, stringsPkg.Use(), `.Replace(`, stringsPkg.Use(), `.Replace(`, stringfunc, `, "`, typeName, `","`, msgname, `"`, ", 1),`&`,``,1) + `,", "`,")
}
} else {
if nullable && !repeated && !proto3 {

View File

@@ -1578,6 +1578,7 @@ func (p *unmarshal) Generate(file *generator.FileDescriptor) {
p.P(`func skip` + p.localName + `(dAtA []byte) (n int, err error) {
l := len(dAtA)
iNdEx := 0
depth := 0
for iNdEx < l {
var wire uint64
for shift := uint(0); ; shift += 7 {
@@ -1609,10 +1610,8 @@ func (p *unmarshal) Generate(file *generator.FileDescriptor) {
break
}
}
return iNdEx, nil
case 1:
iNdEx += 8
return iNdEx, nil
case 2:
var length int
for shift := uint(0); ; shift += 7 {
@@ -1633,57 +1632,32 @@ func (p *unmarshal) Generate(file *generator.FileDescriptor) {
return 0, ErrInvalidLength` + p.localName + `
}
iNdEx += length
if iNdEx < 0 {
return 0, ErrInvalidLength` + p.localName + `
}
return iNdEx, nil
case 3:
for {
var innerWire uint64
var start int = iNdEx
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return 0, ErrIntOverflow` + p.localName + `
}
if iNdEx >= l {
return 0, ` + p.ioPkg.Use() + `.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
innerWire |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
innerWireType := int(innerWire & 0x7)
if innerWireType == 4 {
break
}
next, err := skip` + p.localName + `(dAtA[start:])
if err != nil {
return 0, err
}
iNdEx = start + next
if iNdEx < 0 {
return 0, ErrInvalidLength` + p.localName + `
}
}
return iNdEx, nil
depth++
case 4:
return iNdEx, nil
if depth == 0 {
return 0, ErrUnexpectedEndOfGroup` + p.localName + `
}
depth--
case 5:
iNdEx += 4
return iNdEx, nil
default:
return 0, ` + fmtPkg.Use() + `.Errorf("proto: illegal wireType %d", wireType)
}
if iNdEx < 0 {
return 0, ErrInvalidLength` + p.localName + `
}
if depth == 0 {
return iNdEx, nil
}
}
panic("unreachable")
return 0, ` + p.ioPkg.Use() + `.ErrUnexpectedEOF
}
var (
ErrInvalidLength` + p.localName + ` = ` + fmtPkg.Use() + `.Errorf("proto: negative length found during unmarshaling")
ErrIntOverflow` + p.localName + ` = ` + fmtPkg.Use() + `.Errorf("proto: integer overflow")
ErrUnexpectedEndOfGroup` + p.localName + ` = ` + fmtPkg.Use() + `.Errorf("proto: unexpected end of group")
)
`)
}