Update xdr

This commit is contained in:
Audrius Butkevicius 2015-10-07 00:37:08 +01:00
parent 4ddb066728
commit d6a0a44432
4 changed files with 29 additions and 14 deletions

2
Godeps/Godeps.json generated
View File

@ -19,7 +19,7 @@
}, },
{ {
"ImportPath": "github.com/calmh/xdr", "ImportPath": "github.com/calmh/xdr",
"Rev": "5f7208e86762911861c94f1849eddbfc0a60cbf0" "Rev": "47c0042d09a827b81ee62497f99e5e0c7f0bd31c"
}, },
{ {
"ImportPath": "github.com/golang/snappy", "ImportPath": "github.com/golang/snappy",

View File

@ -4,7 +4,7 @@ go:
install: install:
- export PATH=$PATH:$HOME/gopath/bin - export PATH=$PATH:$HOME/gopath/bin
- go get code.google.com/p/go.tools/cmd/cover - go get golang.org/x/tools/cover
- go get github.com/mattn/goveralls - go get github.com/mattn/goveralls
script: script:

View File

@ -1,7 +1,7 @@
xdr xdr
=== ===
[![Build Status](https://img.shields.io/travis/calmh/xdr.svg?style=flat)](https://travis-ci.org/calmh/xdr) [![Build Status](https://img.shields.io/circleci/project/calmh/xdr.svg?style=flat-square)](https://circleci.com/gh/calmh/xdr)
[![Coverage Status](https://img.shields.io/coveralls/calmh/xdr.svg?style=flat)](https://coveralls.io/r/calmh/xdr?branch=master) [![Coverage Status](https://img.shields.io/coveralls/calmh/xdr.svg?style=flat)](https://coveralls.io/r/calmh/xdr?branch=master)
[![API Documentation](http://img.shields.io/badge/api-Godoc-blue.svg?style=flat)](http://godoc.org/github.com/calmh/xdr) [![API Documentation](http://img.shields.io/badge/api-Godoc-blue.svg?style=flat)](http://godoc.org/github.com/calmh/xdr)
[![MIT License](http://img.shields.io/badge/license-MIT-blue.svg?style=flat)](http://opensource.org/licenses/MIT) [![MIT License](http://img.shields.io/badge/license-MIT-blue.svg?style=flat)](http://opensource.org/licenses/MIT)

View File

@ -28,6 +28,7 @@ type fieldInfo struct {
Encoder string // the encoder name, i.e. "Uint64" for Read/WriteUint64 Encoder string // the encoder name, i.e. "Uint64" for Read/WriteUint64
Convert string // what to convert to when encoding, i.e. "uint64" Convert string // what to convert to when encoding, i.e. "uint64"
Max int // max size for slices and strings Max int // max size for slices and strings
Submax int // max size for strings inside slices
} }
type structInfo struct { type structInfo struct {
@ -156,7 +157,11 @@ func (o *{{.TypeName}}) DecodeXDRFrom(xr *xdr.Reader) error {
{{if ne $fieldInfo.Convert ""}} {{if ne $fieldInfo.Convert ""}}
o.{{$fieldInfo.Name}}[i] = {{$fieldInfo.FieldType}}(xr.Read{{$fieldInfo.Encoder}}()) o.{{$fieldInfo.Name}}[i] = {{$fieldInfo.FieldType}}(xr.Read{{$fieldInfo.Encoder}}())
{{else if $fieldInfo.IsBasic}} {{else if $fieldInfo.IsBasic}}
o.{{$fieldInfo.Name}}[i] = xr.Read{{$fieldInfo.Encoder}}() {{if ge $fieldInfo.Submax 1}}
o.{{$fieldInfo.Name}}[i] = xr.Read{{$fieldInfo.Encoder}}Max({{$fieldInfo.Submax}})
{{else}}
o.{{$fieldInfo.Name}}[i] = xr.Read{{$fieldInfo.Encoder}}()
{{end}}
{{else}} {{else}}
(&o.{{$fieldInfo.Name}}[i]).DecodeXDRFrom(xr) (&o.{{$fieldInfo.Name}}[i]).DecodeXDRFrom(xr)
{{end}} {{end}}
@ -166,7 +171,7 @@ func (o *{{.TypeName}}) DecodeXDRFrom(xr *xdr.Reader) error {
return xr.Error() return xr.Error()
}`)) }`))
var maxRe = regexp.MustCompile(`\Wmax:(\d+)`) var maxRe = regexp.MustCompile(`(?:\Wmax:)(\d+)(?:\s*,\s*(\d+))?`)
type typeSet struct { type typeSet struct {
Type string Type string
@ -198,11 +203,15 @@ func handleStruct(t *ast.StructType) []fieldInfo {
} }
fn := sf.Names[0].Name fn := sf.Names[0].Name
var max = 0 var max1, max2 int
if sf.Comment != nil { if sf.Comment != nil {
c := sf.Comment.List[0].Text c := sf.Comment.List[0].Text
if m := maxRe.FindStringSubmatch(c); m != nil { m := maxRe.FindStringSubmatch(c)
max, _ = strconv.Atoi(m[1]) if len(m) >= 2 {
max1, _ = strconv.Atoi(m[1])
}
if len(m) >= 3 {
max2, _ = strconv.Atoi(m[2])
} }
if strings.Contains(c, "noencode") { if strings.Contains(c, "noencode") {
continue continue
@ -220,14 +229,16 @@ func handleStruct(t *ast.StructType) []fieldInfo {
FieldType: tn, FieldType: tn,
Encoder: enc.Encoder, Encoder: enc.Encoder,
Convert: enc.Type, Convert: enc.Type,
Max: max, Max: max1,
Submax: max2,
} }
} else { } else {
f = fieldInfo{ f = fieldInfo{
Name: fn, Name: fn,
IsBasic: false, IsBasic: false,
FieldType: tn, FieldType: tn,
Max: max, Max: max1,
Submax: max2,
} }
} }
@ -245,7 +256,8 @@ func handleStruct(t *ast.StructType) []fieldInfo {
FieldType: tn, FieldType: tn,
Encoder: enc.Encoder, Encoder: enc.Encoder,
Convert: enc.Type, Convert: enc.Type,
Max: max, Max: max1,
Submax: max2,
} }
} else if enc, ok := xdrEncoders[tn]; ok { } else if enc, ok := xdrEncoders[tn]; ok {
f = fieldInfo{ f = fieldInfo{
@ -255,14 +267,16 @@ func handleStruct(t *ast.StructType) []fieldInfo {
FieldType: tn, FieldType: tn,
Encoder: enc.Encoder, Encoder: enc.Encoder,
Convert: enc.Type, Convert: enc.Type,
Max: max, Max: max1,
Submax: max2,
} }
} else { } else {
f = fieldInfo{ f = fieldInfo{
Name: fn, Name: fn,
IsSlice: true, IsSlice: true,
FieldType: tn, FieldType: tn,
Max: max, Max: max1,
Submax: max2,
} }
} }
@ -270,7 +284,8 @@ func handleStruct(t *ast.StructType) []fieldInfo {
f = fieldInfo{ f = fieldInfo{
Name: fn, Name: fn,
FieldType: ft.Sel.Name, FieldType: ft.Sel.Name,
Max: max, Max: max1,
Submax: max2,
} }
} }