mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
vendor: update github.com/gogo/protobuf and github.com/golang/protobuf
This commit is contained in:
parent
933aa09b73
commit
2afd0a726f
35
cmd/vendor/github.com/cpuguy83/go-md2man/md2man/roff.go
generated
vendored
35
cmd/vendor/github.com/cpuguy83/go-md2man/md2man/roff.go
generated
vendored
@ -118,11 +118,24 @@ func (r *roffRenderer) Paragraph(out *bytes.Buffer, text func() bool) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: This might now work
|
|
||||||
func (r *roffRenderer) Table(out *bytes.Buffer, header []byte, body []byte, columnData []int) {
|
func (r *roffRenderer) Table(out *bytes.Buffer, header []byte, body []byte, columnData []int) {
|
||||||
out.WriteString(".TS\nallbox;\n")
|
out.WriteString("\n.TS\nallbox;\n")
|
||||||
|
|
||||||
|
max_delims := 0
|
||||||
|
lines := strings.Split(strings.TrimRight(string(header), "\n")+"\n"+strings.TrimRight(string(body), "\n"), "\n")
|
||||||
|
for _, w := range lines {
|
||||||
|
cur_delims := strings.Count(w, "\t")
|
||||||
|
if cur_delims > max_delims {
|
||||||
|
max_delims = cur_delims
|
||||||
|
}
|
||||||
|
}
|
||||||
|
out.Write([]byte(strings.Repeat("l ", max_delims+1) + "\n"))
|
||||||
|
out.Write([]byte(strings.Repeat("l ", max_delims+1) + ".\n"))
|
||||||
out.Write(header)
|
out.Write(header)
|
||||||
|
if len(header) > 0 {
|
||||||
|
out.Write([]byte("\n"))
|
||||||
|
}
|
||||||
|
|
||||||
out.Write(body)
|
out.Write(body)
|
||||||
out.WriteString("\n.TE\n")
|
out.WriteString("\n.TE\n")
|
||||||
}
|
}
|
||||||
@ -132,24 +145,30 @@ func (r *roffRenderer) TableRow(out *bytes.Buffer, text []byte) {
|
|||||||
out.WriteString("\n")
|
out.WriteString("\n")
|
||||||
}
|
}
|
||||||
out.Write(text)
|
out.Write(text)
|
||||||
out.WriteString("\n")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *roffRenderer) TableHeaderCell(out *bytes.Buffer, text []byte, align int) {
|
func (r *roffRenderer) TableHeaderCell(out *bytes.Buffer, text []byte, align int) {
|
||||||
if out.Len() > 0 {
|
if out.Len() > 0 {
|
||||||
out.WriteString(" ")
|
out.WriteString("\t")
|
||||||
}
|
}
|
||||||
out.Write(text)
|
if len(text) == 0 {
|
||||||
out.WriteString(" ")
|
text = []byte{' '}
|
||||||
|
}
|
||||||
|
out.Write([]byte("\\fB\\fC" + string(text) + "\\fR"))
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: This is probably broken
|
|
||||||
func (r *roffRenderer) TableCell(out *bytes.Buffer, text []byte, align int) {
|
func (r *roffRenderer) TableCell(out *bytes.Buffer, text []byte, align int) {
|
||||||
if out.Len() > 0 {
|
if out.Len() > 0 {
|
||||||
out.WriteString("\t")
|
out.WriteString("\t")
|
||||||
}
|
}
|
||||||
|
if len(text) > 30 {
|
||||||
|
text = append([]byte("T{\n"), text...)
|
||||||
|
text = append(text, []byte("\nT}")...)
|
||||||
|
}
|
||||||
|
if len(text) == 0 {
|
||||||
|
text = []byte{' '}
|
||||||
|
}
|
||||||
out.Write(text)
|
out.Write(text)
|
||||||
out.WriteString("\t")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *roffRenderer) Footnotes(out *bytes.Buffer, text func() bool) {
|
func (r *roffRenderer) Footnotes(out *bytes.Buffer, text func() bool) {
|
||||||
|
112
cmd/vendor/github.com/gogo/protobuf/proto/decode.go
generated
vendored
112
cmd/vendor/github.com/gogo/protobuf/proto/decode.go
generated
vendored
@ -61,7 +61,6 @@ var ErrInternalBadWireType = errors.New("proto: internal error: bad wiretype for
|
|||||||
// int32, int64, uint32, uint64, bool, and enum
|
// int32, int64, uint32, uint64, bool, and enum
|
||||||
// protocol buffer types.
|
// protocol buffer types.
|
||||||
func DecodeVarint(buf []byte) (x uint64, n int) {
|
func DecodeVarint(buf []byte) (x uint64, n int) {
|
||||||
// x, n already 0
|
|
||||||
for shift := uint(0); shift < 64; shift += 7 {
|
for shift := uint(0); shift < 64; shift += 7 {
|
||||||
if n >= len(buf) {
|
if n >= len(buf) {
|
||||||
return 0, 0
|
return 0, 0
|
||||||
@ -78,13 +77,7 @@ func DecodeVarint(buf []byte) (x uint64, n int) {
|
|||||||
return 0, 0
|
return 0, 0
|
||||||
}
|
}
|
||||||
|
|
||||||
// DecodeVarint reads a varint-encoded integer from the Buffer.
|
func (p *Buffer) decodeVarintSlow() (x uint64, err error) {
|
||||||
// This is the format for the
|
|
||||||
// int32, int64, uint32, uint64, bool, and enum
|
|
||||||
// protocol buffer types.
|
|
||||||
func (p *Buffer) DecodeVarint() (x uint64, err error) {
|
|
||||||
// x, err already 0
|
|
||||||
|
|
||||||
i := p.index
|
i := p.index
|
||||||
l := len(p.buf)
|
l := len(p.buf)
|
||||||
|
|
||||||
@ -107,6 +100,107 @@ func (p *Buffer) DecodeVarint() (x uint64, err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DecodeVarint reads a varint-encoded integer from the Buffer.
|
||||||
|
// This is the format for the
|
||||||
|
// int32, int64, uint32, uint64, bool, and enum
|
||||||
|
// protocol buffer types.
|
||||||
|
func (p *Buffer) DecodeVarint() (x uint64, err error) {
|
||||||
|
i := p.index
|
||||||
|
buf := p.buf
|
||||||
|
|
||||||
|
if i >= len(buf) {
|
||||||
|
return 0, io.ErrUnexpectedEOF
|
||||||
|
} else if buf[i] < 0x80 {
|
||||||
|
p.index++
|
||||||
|
return uint64(buf[i]), nil
|
||||||
|
} else if len(buf)-i < 10 {
|
||||||
|
return p.decodeVarintSlow()
|
||||||
|
}
|
||||||
|
|
||||||
|
var b uint64
|
||||||
|
// we already checked the first byte
|
||||||
|
x = uint64(buf[i]) - 0x80
|
||||||
|
i++
|
||||||
|
|
||||||
|
b = uint64(buf[i])
|
||||||
|
i++
|
||||||
|
x += b << 7
|
||||||
|
if b&0x80 == 0 {
|
||||||
|
goto done
|
||||||
|
}
|
||||||
|
x -= 0x80 << 7
|
||||||
|
|
||||||
|
b = uint64(buf[i])
|
||||||
|
i++
|
||||||
|
x += b << 14
|
||||||
|
if b&0x80 == 0 {
|
||||||
|
goto done
|
||||||
|
}
|
||||||
|
x -= 0x80 << 14
|
||||||
|
|
||||||
|
b = uint64(buf[i])
|
||||||
|
i++
|
||||||
|
x += b << 21
|
||||||
|
if b&0x80 == 0 {
|
||||||
|
goto done
|
||||||
|
}
|
||||||
|
x -= 0x80 << 21
|
||||||
|
|
||||||
|
b = uint64(buf[i])
|
||||||
|
i++
|
||||||
|
x += b << 28
|
||||||
|
if b&0x80 == 0 {
|
||||||
|
goto done
|
||||||
|
}
|
||||||
|
x -= 0x80 << 28
|
||||||
|
|
||||||
|
b = uint64(buf[i])
|
||||||
|
i++
|
||||||
|
x += b << 35
|
||||||
|
if b&0x80 == 0 {
|
||||||
|
goto done
|
||||||
|
}
|
||||||
|
x -= 0x80 << 35
|
||||||
|
|
||||||
|
b = uint64(buf[i])
|
||||||
|
i++
|
||||||
|
x += b << 42
|
||||||
|
if b&0x80 == 0 {
|
||||||
|
goto done
|
||||||
|
}
|
||||||
|
x -= 0x80 << 42
|
||||||
|
|
||||||
|
b = uint64(buf[i])
|
||||||
|
i++
|
||||||
|
x += b << 49
|
||||||
|
if b&0x80 == 0 {
|
||||||
|
goto done
|
||||||
|
}
|
||||||
|
x -= 0x80 << 49
|
||||||
|
|
||||||
|
b = uint64(buf[i])
|
||||||
|
i++
|
||||||
|
x += b << 56
|
||||||
|
if b&0x80 == 0 {
|
||||||
|
goto done
|
||||||
|
}
|
||||||
|
x -= 0x80 << 56
|
||||||
|
|
||||||
|
b = uint64(buf[i])
|
||||||
|
i++
|
||||||
|
x += b << 63
|
||||||
|
if b&0x80 == 0 {
|
||||||
|
goto done
|
||||||
|
}
|
||||||
|
// x -= 0x80 << 63 // Always zero.
|
||||||
|
|
||||||
|
return 0, errOverflow
|
||||||
|
|
||||||
|
done:
|
||||||
|
p.index = i
|
||||||
|
return x, nil
|
||||||
|
}
|
||||||
|
|
||||||
// DecodeFixed64 reads a 64-bit integer from the Buffer.
|
// DecodeFixed64 reads a 64-bit integer from the Buffer.
|
||||||
// This is the format for the
|
// This is the format for the
|
||||||
// fixed64, sfixed64, and double protocol buffer types.
|
// fixed64, sfixed64, and double protocol buffer types.
|
||||||
@ -340,6 +434,8 @@ func (p *Buffer) DecodeGroup(pb Message) error {
|
|||||||
// Buffer and places the decoded result in pb. If the struct
|
// Buffer and places the decoded result in pb. If the struct
|
||||||
// underlying pb does not match the data in the buffer, the results can be
|
// underlying pb does not match the data in the buffer, the results can be
|
||||||
// unpredictable.
|
// unpredictable.
|
||||||
|
//
|
||||||
|
// Unlike proto.Unmarshal, this does not reset pb before starting to unmarshal.
|
||||||
func (p *Buffer) Unmarshal(pb Message) error {
|
func (p *Buffer) Unmarshal(pb Message) error {
|
||||||
// If the object can unmarshal itself, let it.
|
// If the object can unmarshal itself, let it.
|
||||||
if u, ok := pb.(Unmarshaler); ok {
|
if u, ok := pb.(Unmarshaler); ok {
|
||||||
|
5
cmd/vendor/github.com/gogo/protobuf/proto/decode_gogo.go
generated
vendored
5
cmd/vendor/github.com/gogo/protobuf/proto/decode_gogo.go
generated
vendored
@ -98,7 +98,7 @@ func setPtrCustomType(base structPointer, f field, v interface{}) {
|
|||||||
if v == nil {
|
if v == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
structPointer_SetStructPointer(base, f, structPointer(reflect.ValueOf(v).Pointer()))
|
structPointer_SetStructPointer(base, f, toStructPointer(reflect.ValueOf(v)))
|
||||||
}
|
}
|
||||||
|
|
||||||
func setCustomType(base structPointer, f field, value interface{}) {
|
func setCustomType(base structPointer, f field, value interface{}) {
|
||||||
@ -165,7 +165,8 @@ func (o *Buffer) dec_custom_slice_bytes(p *Properties, base structPointer) error
|
|||||||
}
|
}
|
||||||
newBas := appendStructPointer(base, p.field, p.ctype)
|
newBas := appendStructPointer(base, p.field, p.ctype)
|
||||||
|
|
||||||
setCustomType(newBas, 0, custom)
|
var zero field
|
||||||
|
setCustomType(newBas, zero, custom)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
100
cmd/vendor/github.com/gogo/protobuf/proto/duration.go
generated
vendored
Normal file
100
cmd/vendor/github.com/gogo/protobuf/proto/duration.go
generated
vendored
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
// Go support for Protocol Buffers - Google's data interchange format
|
||||||
|
//
|
||||||
|
// Copyright 2016 The Go Authors. All rights reserved.
|
||||||
|
// https://github.com/golang/protobuf
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are
|
||||||
|
// met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above
|
||||||
|
// copyright notice, this list of conditions and the following disclaimer
|
||||||
|
// in the documentation and/or other materials provided with the
|
||||||
|
// distribution.
|
||||||
|
// * Neither the name of Google Inc. nor the names of its
|
||||||
|
// contributors may be used to endorse or promote products derived from
|
||||||
|
// this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
package proto
|
||||||
|
|
||||||
|
// This file implements conversions between google.protobuf.Duration
|
||||||
|
// and time.Duration.
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
// Range of a Duration in seconds, as specified in
|
||||||
|
// google/protobuf/duration.proto. This is about 10,000 years in seconds.
|
||||||
|
maxSeconds = int64(10000 * 365.25 * 24 * 60 * 60)
|
||||||
|
minSeconds = -maxSeconds
|
||||||
|
)
|
||||||
|
|
||||||
|
// validateDuration determines whether the Duration is valid according to the
|
||||||
|
// definition in google/protobuf/duration.proto. A valid Duration
|
||||||
|
// may still be too large to fit into a time.Duration (the range of Duration
|
||||||
|
// is about 10,000 years, and the range of time.Duration is about 290).
|
||||||
|
func validateDuration(d *duration) error {
|
||||||
|
if d == nil {
|
||||||
|
return errors.New("duration: nil Duration")
|
||||||
|
}
|
||||||
|
if d.Seconds < minSeconds || d.Seconds > maxSeconds {
|
||||||
|
return fmt.Errorf("duration: %#v: seconds out of range", d)
|
||||||
|
}
|
||||||
|
if d.Nanos <= -1e9 || d.Nanos >= 1e9 {
|
||||||
|
return fmt.Errorf("duration: %#v: nanos out of range", d)
|
||||||
|
}
|
||||||
|
// Seconds and Nanos must have the same sign, unless d.Nanos is zero.
|
||||||
|
if (d.Seconds < 0 && d.Nanos > 0) || (d.Seconds > 0 && d.Nanos < 0) {
|
||||||
|
return fmt.Errorf("duration: %#v: seconds and nanos have different signs", d)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// DurationFromProto converts a Duration to a time.Duration. DurationFromProto
|
||||||
|
// returns an error if the Duration is invalid or is too large to be
|
||||||
|
// represented in a time.Duration.
|
||||||
|
func durationFromProto(p *duration) (time.Duration, error) {
|
||||||
|
if err := validateDuration(p); err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
d := time.Duration(p.Seconds) * time.Second
|
||||||
|
if int64(d/time.Second) != p.Seconds {
|
||||||
|
return 0, fmt.Errorf("duration: %#v is out of range for time.Duration", p)
|
||||||
|
}
|
||||||
|
if p.Nanos != 0 {
|
||||||
|
d += time.Duration(p.Nanos)
|
||||||
|
if (d < 0) != (p.Nanos < 0) {
|
||||||
|
return 0, fmt.Errorf("duration: %#v is out of range for time.Duration", p)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return d, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// DurationProto converts a time.Duration to a Duration.
|
||||||
|
func durationProto(d time.Duration) *duration {
|
||||||
|
nanos := d.Nanoseconds()
|
||||||
|
secs := nanos / 1e9
|
||||||
|
nanos -= secs * 1e9
|
||||||
|
return &duration{
|
||||||
|
Seconds: secs,
|
||||||
|
Nanos: int32(nanos),
|
||||||
|
}
|
||||||
|
}
|
203
cmd/vendor/github.com/gogo/protobuf/proto/duration_gogo.go
generated
vendored
Normal file
203
cmd/vendor/github.com/gogo/protobuf/proto/duration_gogo.go
generated
vendored
Normal file
@ -0,0 +1,203 @@
|
|||||||
|
// Protocol Buffers for Go with Gadgets
|
||||||
|
//
|
||||||
|
// Copyright (c) 2016, The GoGo Authors. All rights reserved.
|
||||||
|
// http://github.com/gogo/protobuf
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are
|
||||||
|
// met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above
|
||||||
|
// copyright notice, this list of conditions and the following disclaimer
|
||||||
|
// in the documentation and/or other materials provided with the
|
||||||
|
// distribution.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
package proto
|
||||||
|
|
||||||
|
import (
|
||||||
|
"reflect"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
var durationType = reflect.TypeOf((*time.Duration)(nil)).Elem()
|
||||||
|
|
||||||
|
type duration struct {
|
||||||
|
Seconds int64 `protobuf:"varint,1,opt,name=seconds,proto3" json:"seconds,omitempty"`
|
||||||
|
Nanos int32 `protobuf:"varint,2,opt,name=nanos,proto3" json:"nanos,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *duration) Reset() { *m = duration{} }
|
||||||
|
func (*duration) ProtoMessage() {}
|
||||||
|
func (*duration) String() string { return "duration<string>" }
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
RegisterType((*duration)(nil), "gogo.protobuf.proto.duration")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Buffer) decDuration() (time.Duration, error) {
|
||||||
|
b, err := o.DecodeRawBytes(true)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
dproto := &duration{}
|
||||||
|
if err := Unmarshal(b, dproto); err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return durationFromProto(dproto)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Buffer) dec_duration(p *Properties, base structPointer) error {
|
||||||
|
d, err := o.decDuration()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
word64_Set(structPointer_Word64(base, p.field), o, uint64(d))
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Buffer) dec_ref_duration(p *Properties, base structPointer) error {
|
||||||
|
d, err := o.decDuration()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
word64Val_Set(structPointer_Word64Val(base, p.field), o, uint64(d))
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Buffer) dec_slice_duration(p *Properties, base structPointer) error {
|
||||||
|
d, err := o.decDuration()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
newBas := appendStructPointer(base, p.field, reflect.SliceOf(reflect.PtrTo(durationType)))
|
||||||
|
var zero field
|
||||||
|
setPtrCustomType(newBas, zero, &d)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Buffer) dec_slice_ref_duration(p *Properties, base structPointer) error {
|
||||||
|
d, err := o.decDuration()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
structPointer_Word64Slice(base, p.field).Append(uint64(d))
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func size_duration(p *Properties, base structPointer) (n int) {
|
||||||
|
structp := structPointer_GetStructPointer(base, p.field)
|
||||||
|
if structPointer_IsNil(structp) {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
dur := structPointer_Interface(structp, durationType).(*time.Duration)
|
||||||
|
d := durationProto(*dur)
|
||||||
|
size := Size(d)
|
||||||
|
return size + sizeVarint(uint64(size)) + len(p.tagcode)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Buffer) enc_duration(p *Properties, base structPointer) error {
|
||||||
|
structp := structPointer_GetStructPointer(base, p.field)
|
||||||
|
if structPointer_IsNil(structp) {
|
||||||
|
return ErrNil
|
||||||
|
}
|
||||||
|
dur := structPointer_Interface(structp, durationType).(*time.Duration)
|
||||||
|
d := durationProto(*dur)
|
||||||
|
data, err := Marshal(d)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
o.buf = append(o.buf, p.tagcode...)
|
||||||
|
o.EncodeRawBytes(data)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func size_ref_duration(p *Properties, base structPointer) (n int) {
|
||||||
|
dur := structPointer_InterfaceAt(base, p.field, durationType).(*time.Duration)
|
||||||
|
d := durationProto(*dur)
|
||||||
|
size := Size(d)
|
||||||
|
return size + sizeVarint(uint64(size)) + len(p.tagcode)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Buffer) enc_ref_duration(p *Properties, base structPointer) error {
|
||||||
|
dur := structPointer_InterfaceAt(base, p.field, durationType).(*time.Duration)
|
||||||
|
d := durationProto(*dur)
|
||||||
|
data, err := Marshal(d)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
o.buf = append(o.buf, p.tagcode...)
|
||||||
|
o.EncodeRawBytes(data)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func size_slice_duration(p *Properties, base structPointer) (n int) {
|
||||||
|
pdurs := structPointer_InterfaceAt(base, p.field, reflect.SliceOf(reflect.PtrTo(durationType))).(*[]*time.Duration)
|
||||||
|
durs := *pdurs
|
||||||
|
for i := 0; i < len(durs); i++ {
|
||||||
|
if durs[i] == nil {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
dproto := durationProto(*durs[i])
|
||||||
|
size := Size(dproto)
|
||||||
|
n += len(p.tagcode) + size + sizeVarint(uint64(size))
|
||||||
|
}
|
||||||
|
return n
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Buffer) enc_slice_duration(p *Properties, base structPointer) error {
|
||||||
|
pdurs := structPointer_InterfaceAt(base, p.field, reflect.SliceOf(reflect.PtrTo(durationType))).(*[]*time.Duration)
|
||||||
|
durs := *pdurs
|
||||||
|
for i := 0; i < len(durs); i++ {
|
||||||
|
if durs[i] == nil {
|
||||||
|
return errRepeatedHasNil
|
||||||
|
}
|
||||||
|
dproto := durationProto(*durs[i])
|
||||||
|
data, err := Marshal(dproto)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
o.buf = append(o.buf, p.tagcode...)
|
||||||
|
o.EncodeRawBytes(data)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func size_slice_ref_duration(p *Properties, base structPointer) (n int) {
|
||||||
|
pdurs := structPointer_InterfaceAt(base, p.field, reflect.SliceOf(durationType)).(*[]time.Duration)
|
||||||
|
durs := *pdurs
|
||||||
|
for i := 0; i < len(durs); i++ {
|
||||||
|
dproto := durationProto(durs[i])
|
||||||
|
size := Size(dproto)
|
||||||
|
n += len(p.tagcode) + size + sizeVarint(uint64(size))
|
||||||
|
}
|
||||||
|
return n
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Buffer) enc_slice_ref_duration(p *Properties, base structPointer) error {
|
||||||
|
pdurs := structPointer_InterfaceAt(base, p.field, reflect.SliceOf(durationType)).(*[]time.Duration)
|
||||||
|
durs := *pdurs
|
||||||
|
for i := 0; i < len(durs); i++ {
|
||||||
|
dproto := durationProto(durs[i])
|
||||||
|
data, err := Marshal(dproto)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
o.buf = append(o.buf, p.tagcode...)
|
||||||
|
o.EncodeRawBytes(data)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
25
cmd/vendor/github.com/gogo/protobuf/proto/encode.go
generated
vendored
25
cmd/vendor/github.com/gogo/protobuf/proto/encode.go
generated
vendored
@ -234,10 +234,6 @@ func Marshal(pb Message) ([]byte, error) {
|
|||||||
}
|
}
|
||||||
p := NewBuffer(nil)
|
p := NewBuffer(nil)
|
||||||
err := p.Marshal(pb)
|
err := p.Marshal(pb)
|
||||||
var state errorState
|
|
||||||
if err != nil && !state.shouldContinue(err, nil) {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if p.buf == nil && err == nil {
|
if p.buf == nil && err == nil {
|
||||||
// Return a non-nil slice on success.
|
// Return a non-nil slice on success.
|
||||||
return []byte{}, nil
|
return []byte{}, nil
|
||||||
@ -266,11 +262,8 @@ func (p *Buffer) Marshal(pb Message) error {
|
|||||||
// Can the object marshal itself?
|
// Can the object marshal itself?
|
||||||
if m, ok := pb.(Marshaler); ok {
|
if m, ok := pb.(Marshaler); ok {
|
||||||
data, err := m.Marshal()
|
data, err := m.Marshal()
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
p.buf = append(p.buf, data...)
|
p.buf = append(p.buf, data...)
|
||||||
return nil
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
t, base, err := getbase(pb)
|
t, base, err := getbase(pb)
|
||||||
@ -282,7 +275,7 @@ func (p *Buffer) Marshal(pb Message) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if collectStats {
|
if collectStats {
|
||||||
stats.Encode++
|
(stats).Encode++ // Parens are to work around a goimports bug.
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(p.buf) > maxMarshalSize {
|
if len(p.buf) > maxMarshalSize {
|
||||||
@ -309,7 +302,7 @@ func Size(pb Message) (n int) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if collectStats {
|
if collectStats {
|
||||||
stats.Size++
|
(stats).Size++ // Parens are to work around a goimports bug.
|
||||||
}
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
@ -1014,7 +1007,6 @@ func size_slice_struct_message(p *Properties, base structPointer) (n int) {
|
|||||||
if p.isMarshaler {
|
if p.isMarshaler {
|
||||||
m := structPointer_Interface(structp, p.stype).(Marshaler)
|
m := structPointer_Interface(structp, p.stype).(Marshaler)
|
||||||
data, _ := m.Marshal()
|
data, _ := m.Marshal()
|
||||||
n += len(p.tagcode)
|
|
||||||
n += sizeRawBytes(data)
|
n += sizeRawBytes(data)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
@ -1083,10 +1075,17 @@ func (o *Buffer) enc_map(p *Properties, base structPointer) error {
|
|||||||
|
|
||||||
func (o *Buffer) enc_exts(p *Properties, base structPointer) error {
|
func (o *Buffer) enc_exts(p *Properties, base structPointer) error {
|
||||||
exts := structPointer_Extensions(base, p.field)
|
exts := structPointer_Extensions(base, p.field)
|
||||||
if err := encodeExtensions(exts); err != nil {
|
|
||||||
|
v, mu := exts.extensionsRead()
|
||||||
|
if v == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
mu.Lock()
|
||||||
|
defer mu.Unlock()
|
||||||
|
if err := encodeExtensionsMap(v); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
v, _ := exts.extensionsRead()
|
|
||||||
|
|
||||||
return o.enc_map_body(v)
|
return o.enc_map_body(v)
|
||||||
}
|
}
|
||||||
|
16
cmd/vendor/github.com/gogo/protobuf/proto/encode_gogo.go
generated
vendored
16
cmd/vendor/github.com/gogo/protobuf/proto/encode_gogo.go
generated
vendored
@ -196,12 +196,10 @@ func size_ref_struct_message(p *Properties, base structPointer) int {
|
|||||||
// Encode a slice of references to message struct pointers ([]struct).
|
// Encode a slice of references to message struct pointers ([]struct).
|
||||||
func (o *Buffer) enc_slice_ref_struct_message(p *Properties, base structPointer) error {
|
func (o *Buffer) enc_slice_ref_struct_message(p *Properties, base structPointer) error {
|
||||||
var state errorState
|
var state errorState
|
||||||
ss := structPointer_GetStructPointer(base, p.field)
|
ss := structPointer_StructRefSlice(base, p.field, p.stype.Size())
|
||||||
ss1 := structPointer_GetRefStructPointer(ss, field(0))
|
l := ss.Len()
|
||||||
size := p.stype.Size()
|
|
||||||
l := structPointer_Len(base, p.field)
|
|
||||||
for i := 0; i < l; i++ {
|
for i := 0; i < l; i++ {
|
||||||
structp := structPointer_Add(ss1, field(uintptr(i)*size))
|
structp := ss.Index(i)
|
||||||
if structPointer_IsNil(structp) {
|
if structPointer_IsNil(structp) {
|
||||||
return errRepeatedHasNil
|
return errRepeatedHasNil
|
||||||
}
|
}
|
||||||
@ -233,13 +231,11 @@ func (o *Buffer) enc_slice_ref_struct_message(p *Properties, base structPointer)
|
|||||||
|
|
||||||
//TODO this is only copied, please fix this
|
//TODO this is only copied, please fix this
|
||||||
func size_slice_ref_struct_message(p *Properties, base structPointer) (n int) {
|
func size_slice_ref_struct_message(p *Properties, base structPointer) (n int) {
|
||||||
ss := structPointer_GetStructPointer(base, p.field)
|
ss := structPointer_StructRefSlice(base, p.field, p.stype.Size())
|
||||||
ss1 := structPointer_GetRefStructPointer(ss, field(0))
|
l := ss.Len()
|
||||||
size := p.stype.Size()
|
|
||||||
l := structPointer_Len(base, p.field)
|
|
||||||
n += l * len(p.tagcode)
|
n += l * len(p.tagcode)
|
||||||
for i := 0; i < l; i++ {
|
for i := 0; i < l; i++ {
|
||||||
structp := structPointer_Add(ss1, field(uintptr(i)*size))
|
structp := ss.Index(i)
|
||||||
if structPointer_IsNil(structp) {
|
if structPointer_IsNil(structp) {
|
||||||
return // return the size up to this point
|
return // return the size up to this point
|
||||||
}
|
}
|
||||||
|
8
cmd/vendor/github.com/gogo/protobuf/proto/equal.go
generated
vendored
8
cmd/vendor/github.com/gogo/protobuf/proto/equal.go
generated
vendored
@ -54,13 +54,17 @@ Equality is defined in this way:
|
|||||||
in a proto3 .proto file, fields are not "set"; specifically,
|
in a proto3 .proto file, fields are not "set"; specifically,
|
||||||
zero length proto3 "bytes" fields are equal (nil == {}).
|
zero length proto3 "bytes" fields are equal (nil == {}).
|
||||||
- Two repeated fields are equal iff their lengths are the same,
|
- Two repeated fields are equal iff their lengths are the same,
|
||||||
and their corresponding elements are equal (a "bytes" field,
|
and their corresponding elements are equal. Note a "bytes" field,
|
||||||
although represented by []byte, is not a repeated field)
|
although represented by []byte, is not a repeated field and the
|
||||||
|
rule for the scalar fields described above applies.
|
||||||
- Two unset fields are equal.
|
- Two unset fields are equal.
|
||||||
- Two unknown field sets are equal if their current
|
- Two unknown field sets are equal if their current
|
||||||
encoded state is equal.
|
encoded state is equal.
|
||||||
- Two extension sets are equal iff they have corresponding
|
- Two extension sets are equal iff they have corresponding
|
||||||
elements that are pairwise equal.
|
elements that are pairwise equal.
|
||||||
|
- Two map fields are equal iff their lengths are the same,
|
||||||
|
and they contain the same set of elements. Zero-length map
|
||||||
|
fields are equal.
|
||||||
- Every other combination of things are not equal.
|
- Every other combination of things are not equal.
|
||||||
|
|
||||||
The return value is undefined if a and b are not protocol buffers.
|
The return value is undefined if a and b are not protocol buffers.
|
||||||
|
4
cmd/vendor/github.com/gogo/protobuf/proto/extensions.go
generated
vendored
4
cmd/vendor/github.com/gogo/protobuf/proto/extensions.go
generated
vendored
@ -167,6 +167,7 @@ type ExtensionDesc struct {
|
|||||||
Field int32 // field number
|
Field int32 // field number
|
||||||
Name string // fully-qualified name of extension, for text formatting
|
Name string // fully-qualified name of extension, for text formatting
|
||||||
Tag string // protobuf tag style
|
Tag string // protobuf tag style
|
||||||
|
Filename string // name of the file in which the extension is defined
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ed *ExtensionDesc) repeated() bool {
|
func (ed *ExtensionDesc) repeated() bool {
|
||||||
@ -587,6 +588,9 @@ func ExtensionDescs(pb Message) ([]*ExtensionDesc, error) {
|
|||||||
registeredExtensions := RegisteredExtensions(pb)
|
registeredExtensions := RegisteredExtensions(pb)
|
||||||
|
|
||||||
emap, mu := epb.extensionsRead()
|
emap, mu := epb.extensionsRead()
|
||||||
|
if emap == nil {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
mu.Lock()
|
mu.Lock()
|
||||||
defer mu.Unlock()
|
defer mu.Unlock()
|
||||||
extensions := make([]*ExtensionDesc, 0, len(emap))
|
extensions := make([]*ExtensionDesc, 0, len(emap))
|
||||||
|
2
cmd/vendor/github.com/gogo/protobuf/proto/lib.go
generated
vendored
2
cmd/vendor/github.com/gogo/protobuf/proto/lib.go
generated
vendored
@ -308,7 +308,7 @@ func GetStats() Stats { return stats }
|
|||||||
// temporary Buffer and are fine for most applications.
|
// temporary Buffer and are fine for most applications.
|
||||||
type Buffer struct {
|
type Buffer struct {
|
||||||
buf []byte // encode/decode byte stream
|
buf []byte // encode/decode byte stream
|
||||||
index int // write point
|
index int // read point
|
||||||
|
|
||||||
// pools of basic types to amortize allocation.
|
// pools of basic types to amortize allocation.
|
||||||
bools []bool
|
bools []bool
|
||||||
|
85
cmd/vendor/github.com/gogo/protobuf/proto/pointer_reflect_gogo.go
generated
vendored
Normal file
85
cmd/vendor/github.com/gogo/protobuf/proto/pointer_reflect_gogo.go
generated
vendored
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
// Protocol Buffers for Go with Gadgets
|
||||||
|
//
|
||||||
|
// Copyright (c) 2016, The GoGo Authors. All rights reserved.
|
||||||
|
// http://github.com/gogo/protobuf
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are
|
||||||
|
// met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above
|
||||||
|
// copyright notice, this list of conditions and the following disclaimer
|
||||||
|
// in the documentation and/or other materials provided with the
|
||||||
|
// distribution.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
// +build appengine js
|
||||||
|
|
||||||
|
package proto
|
||||||
|
|
||||||
|
import (
|
||||||
|
"reflect"
|
||||||
|
)
|
||||||
|
|
||||||
|
func structPointer_FieldPointer(p structPointer, f field) structPointer {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func appendStructPointer(base structPointer, f field, typ reflect.Type) structPointer {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func structPointer_InterfaceAt(p structPointer, f field, t reflect.Type) interface{} {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func structPointer_InterfaceRef(p structPointer, f field, t reflect.Type) interface{} {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func structPointer_GetRefStructPointer(p structPointer, f field) structPointer {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func structPointer_Add(p structPointer, size field) structPointer {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func structPointer_Len(p structPointer, f field) int {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func structPointer_GetSliceHeader(p structPointer, f field) *reflect.SliceHeader {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func structPointer_Copy(oldptr structPointer, newptr structPointer, size int) {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func structPointer_StructRefSlice(p structPointer, f field, size uintptr) *structRefSlice {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
type structRefSlice struct{}
|
||||||
|
|
||||||
|
func (v *structRefSlice) Len() int {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v *structRefSlice) Index(i int) structPointer {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
23
cmd/vendor/github.com/gogo/protobuf/proto/pointer_unsafe_gogo.go
generated
vendored
23
cmd/vendor/github.com/gogo/protobuf/proto/pointer_unsafe_gogo.go
generated
vendored
@ -26,7 +26,7 @@
|
|||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
// +build !appengine
|
// +build !appengine,!js
|
||||||
|
|
||||||
// This file contains the implementation of the proto field accesses using package unsafe.
|
// This file contains the implementation of the proto field accesses using package unsafe.
|
||||||
|
|
||||||
@ -105,3 +105,24 @@ func structPointer_Add(p structPointer, size field) structPointer {
|
|||||||
func structPointer_Len(p structPointer, f field) int {
|
func structPointer_Len(p structPointer, f field) int {
|
||||||
return len(*(*[]interface{})(unsafe.Pointer(structPointer_GetRefStructPointer(p, f))))
|
return len(*(*[]interface{})(unsafe.Pointer(structPointer_GetRefStructPointer(p, f))))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func structPointer_StructRefSlice(p structPointer, f field, size uintptr) *structRefSlice {
|
||||||
|
return &structRefSlice{p: p, f: f, size: size}
|
||||||
|
}
|
||||||
|
|
||||||
|
// A structRefSlice represents a slice of structs (themselves submessages or groups).
|
||||||
|
type structRefSlice struct {
|
||||||
|
p structPointer
|
||||||
|
f field
|
||||||
|
size uintptr
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v *structRefSlice) Len() int {
|
||||||
|
return structPointer_Len(v.p, v.f)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v *structRefSlice) Index(i int) structPointer {
|
||||||
|
ss := structPointer_GetStructPointer(v.p, v.f)
|
||||||
|
ss1 := structPointer_GetRefStructPointer(ss, 0)
|
||||||
|
return structPointer_Add(ss1, field(uintptr(i)*v.size))
|
||||||
|
}
|
||||||
|
34
cmd/vendor/github.com/gogo/protobuf/proto/properties.go
generated
vendored
34
cmd/vendor/github.com/gogo/protobuf/proto/properties.go
generated
vendored
@ -193,7 +193,8 @@ type Properties struct {
|
|||||||
Default string // default value
|
Default string // default value
|
||||||
HasDefault bool // whether an explicit default was provided
|
HasDefault bool // whether an explicit default was provided
|
||||||
CustomType string
|
CustomType string
|
||||||
def_uint64 uint64
|
StdTime bool
|
||||||
|
StdDuration bool
|
||||||
|
|
||||||
enc encoder
|
enc encoder
|
||||||
valEnc valueEncoder // set for bool and numeric types only
|
valEnc valueEncoder // set for bool and numeric types only
|
||||||
@ -340,6 +341,10 @@ func (p *Properties) Parse(s string) {
|
|||||||
p.OrigName = strings.Split(f, "=")[1]
|
p.OrigName = strings.Split(f, "=")[1]
|
||||||
case strings.HasPrefix(f, "customtype="):
|
case strings.HasPrefix(f, "customtype="):
|
||||||
p.CustomType = strings.Split(f, "=")[1]
|
p.CustomType = strings.Split(f, "=")[1]
|
||||||
|
case f == "stdtime":
|
||||||
|
p.StdTime = true
|
||||||
|
case f == "stdduration":
|
||||||
|
p.StdDuration = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -355,11 +360,22 @@ func (p *Properties) setEncAndDec(typ reflect.Type, f *reflect.StructField, lock
|
|||||||
p.enc = nil
|
p.enc = nil
|
||||||
p.dec = nil
|
p.dec = nil
|
||||||
p.size = nil
|
p.size = nil
|
||||||
if len(p.CustomType) > 0 {
|
isMap := typ.Kind() == reflect.Map
|
||||||
|
if len(p.CustomType) > 0 && !isMap {
|
||||||
p.setCustomEncAndDec(typ)
|
p.setCustomEncAndDec(typ)
|
||||||
p.setTag(lockGetProp)
|
p.setTag(lockGetProp)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if p.StdTime && !isMap {
|
||||||
|
p.setTimeEncAndDec(typ)
|
||||||
|
p.setTag(lockGetProp)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if p.StdDuration && !isMap {
|
||||||
|
p.setDurationEncAndDec(typ)
|
||||||
|
p.setTag(lockGetProp)
|
||||||
|
return
|
||||||
|
}
|
||||||
switch t1 := typ; t1.Kind() {
|
switch t1 := typ; t1.Kind() {
|
||||||
default:
|
default:
|
||||||
fmt.Fprintf(os.Stderr, "proto: no coders for %v\n", t1)
|
fmt.Fprintf(os.Stderr, "proto: no coders for %v\n", t1)
|
||||||
@ -630,6 +646,10 @@ func (p *Properties) setEncAndDec(typ reflect.Type, f *reflect.StructField, lock
|
|||||||
// so we need encoders for the pointer to this type.
|
// so we need encoders for the pointer to this type.
|
||||||
vtype = reflect.PtrTo(vtype)
|
vtype = reflect.PtrTo(vtype)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
p.mvalprop.CustomType = p.CustomType
|
||||||
|
p.mvalprop.StdDuration = p.StdDuration
|
||||||
|
p.mvalprop.StdTime = p.StdTime
|
||||||
p.mvalprop.init(vtype, "Value", f.Tag.Get("protobuf_val"), nil, lockGetProp)
|
p.mvalprop.init(vtype, "Value", f.Tag.Get("protobuf_val"), nil, lockGetProp)
|
||||||
}
|
}
|
||||||
p.setTag(lockGetProp)
|
p.setTag(lockGetProp)
|
||||||
@ -920,7 +940,15 @@ func RegisterType(x Message, name string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// MessageName returns the fully-qualified proto name for the given message type.
|
// MessageName returns the fully-qualified proto name for the given message type.
|
||||||
func MessageName(x Message) string { return revProtoTypes[reflect.TypeOf(x)] }
|
func MessageName(x Message) string {
|
||||||
|
type xname interface {
|
||||||
|
XXX_MessageName() string
|
||||||
|
}
|
||||||
|
if m, ok := x.(xname); ok {
|
||||||
|
return m.XXX_MessageName()
|
||||||
|
}
|
||||||
|
return revProtoTypes[reflect.TypeOf(x)]
|
||||||
|
}
|
||||||
|
|
||||||
// MessageType returns the message type (pointer to struct) for a named message.
|
// MessageType returns the message type (pointer to struct) for a named message.
|
||||||
func MessageType(name string) reflect.Type { return protoTypes[name] }
|
func MessageType(name string) reflect.Type { return protoTypes[name] }
|
||||||
|
45
cmd/vendor/github.com/gogo/protobuf/proto/properties_gogo.go
generated
vendored
45
cmd/vendor/github.com/gogo/protobuf/proto/properties_gogo.go
generated
vendored
@ -51,6 +51,51 @@ func (p *Properties) setCustomEncAndDec(typ reflect.Type) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *Properties) setDurationEncAndDec(typ reflect.Type) {
|
||||||
|
if p.Repeated {
|
||||||
|
if typ.Elem().Kind() == reflect.Ptr {
|
||||||
|
p.enc = (*Buffer).enc_slice_duration
|
||||||
|
p.dec = (*Buffer).dec_slice_duration
|
||||||
|
p.size = size_slice_duration
|
||||||
|
} else {
|
||||||
|
p.enc = (*Buffer).enc_slice_ref_duration
|
||||||
|
p.dec = (*Buffer).dec_slice_ref_duration
|
||||||
|
p.size = size_slice_ref_duration
|
||||||
|
}
|
||||||
|
} else if typ.Kind() == reflect.Ptr {
|
||||||
|
p.enc = (*Buffer).enc_duration
|
||||||
|
p.dec = (*Buffer).dec_duration
|
||||||
|
p.size = size_duration
|
||||||
|
} else {
|
||||||
|
p.enc = (*Buffer).enc_ref_duration
|
||||||
|
p.dec = (*Buffer).dec_ref_duration
|
||||||
|
p.size = size_ref_duration
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *Properties) setTimeEncAndDec(typ reflect.Type) {
|
||||||
|
if p.Repeated {
|
||||||
|
if typ.Elem().Kind() == reflect.Ptr {
|
||||||
|
p.enc = (*Buffer).enc_slice_time
|
||||||
|
p.dec = (*Buffer).dec_slice_time
|
||||||
|
p.size = size_slice_time
|
||||||
|
} else {
|
||||||
|
p.enc = (*Buffer).enc_slice_ref_time
|
||||||
|
p.dec = (*Buffer).dec_slice_ref_time
|
||||||
|
p.size = size_slice_ref_time
|
||||||
|
}
|
||||||
|
} else if typ.Kind() == reflect.Ptr {
|
||||||
|
p.enc = (*Buffer).enc_time
|
||||||
|
p.dec = (*Buffer).dec_time
|
||||||
|
p.size = size_time
|
||||||
|
} else {
|
||||||
|
p.enc = (*Buffer).enc_ref_time
|
||||||
|
p.dec = (*Buffer).dec_ref_time
|
||||||
|
p.size = size_ref_time
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
func (p *Properties) setSliceOfNonPointerStructs(typ reflect.Type) {
|
func (p *Properties) setSliceOfNonPointerStructs(typ reflect.Type) {
|
||||||
t2 := typ.Elem()
|
t2 := typ.Elem()
|
||||||
p.sstype = typ
|
p.sstype = typ
|
||||||
|
163
cmd/vendor/github.com/gogo/protobuf/proto/text.go
generated
vendored
163
cmd/vendor/github.com/gogo/protobuf/proto/text.go
generated
vendored
@ -51,6 +51,7 @@ import (
|
|||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -181,7 +182,93 @@ type raw interface {
|
|||||||
Bytes() []byte
|
Bytes() []byte
|
||||||
}
|
}
|
||||||
|
|
||||||
func writeStruct(w *textWriter, sv reflect.Value) error {
|
func requiresQuotes(u string) bool {
|
||||||
|
// When type URL contains any characters except [0-9A-Za-z./\-]*, it must be quoted.
|
||||||
|
for _, ch := range u {
|
||||||
|
switch {
|
||||||
|
case ch == '.' || ch == '/' || ch == '_':
|
||||||
|
continue
|
||||||
|
case '0' <= ch && ch <= '9':
|
||||||
|
continue
|
||||||
|
case 'A' <= ch && ch <= 'Z':
|
||||||
|
continue
|
||||||
|
case 'a' <= ch && ch <= 'z':
|
||||||
|
continue
|
||||||
|
default:
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// isAny reports whether sv is a google.protobuf.Any message
|
||||||
|
func isAny(sv reflect.Value) bool {
|
||||||
|
type wkt interface {
|
||||||
|
XXX_WellKnownType() string
|
||||||
|
}
|
||||||
|
t, ok := sv.Addr().Interface().(wkt)
|
||||||
|
return ok && t.XXX_WellKnownType() == "Any"
|
||||||
|
}
|
||||||
|
|
||||||
|
// writeProto3Any writes an expanded google.protobuf.Any message.
|
||||||
|
//
|
||||||
|
// It returns (false, nil) if sv value can't be unmarshaled (e.g. because
|
||||||
|
// required messages are not linked in).
|
||||||
|
//
|
||||||
|
// It returns (true, error) when sv was written in expanded format or an error
|
||||||
|
// was encountered.
|
||||||
|
func (tm *TextMarshaler) writeProto3Any(w *textWriter, sv reflect.Value) (bool, error) {
|
||||||
|
turl := sv.FieldByName("TypeUrl")
|
||||||
|
val := sv.FieldByName("Value")
|
||||||
|
if !turl.IsValid() || !val.IsValid() {
|
||||||
|
return true, errors.New("proto: invalid google.protobuf.Any message")
|
||||||
|
}
|
||||||
|
|
||||||
|
b, ok := val.Interface().([]byte)
|
||||||
|
if !ok {
|
||||||
|
return true, errors.New("proto: invalid google.protobuf.Any message")
|
||||||
|
}
|
||||||
|
|
||||||
|
parts := strings.Split(turl.String(), "/")
|
||||||
|
mt := MessageType(parts[len(parts)-1])
|
||||||
|
if mt == nil {
|
||||||
|
return false, nil
|
||||||
|
}
|
||||||
|
m := reflect.New(mt.Elem())
|
||||||
|
if err := Unmarshal(b, m.Interface().(Message)); err != nil {
|
||||||
|
return false, nil
|
||||||
|
}
|
||||||
|
w.Write([]byte("["))
|
||||||
|
u := turl.String()
|
||||||
|
if requiresQuotes(u) {
|
||||||
|
writeString(w, u)
|
||||||
|
} else {
|
||||||
|
w.Write([]byte(u))
|
||||||
|
}
|
||||||
|
if w.compact {
|
||||||
|
w.Write([]byte("]:<"))
|
||||||
|
} else {
|
||||||
|
w.Write([]byte("]: <\n"))
|
||||||
|
w.ind++
|
||||||
|
}
|
||||||
|
if err := tm.writeStruct(w, m.Elem()); err != nil {
|
||||||
|
return true, err
|
||||||
|
}
|
||||||
|
if w.compact {
|
||||||
|
w.Write([]byte("> "))
|
||||||
|
} else {
|
||||||
|
w.ind--
|
||||||
|
w.Write([]byte(">\n"))
|
||||||
|
}
|
||||||
|
return true, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (tm *TextMarshaler) writeStruct(w *textWriter, sv reflect.Value) error {
|
||||||
|
if tm.ExpandAny && isAny(sv) {
|
||||||
|
if canExpand, err := tm.writeProto3Any(w, sv); canExpand {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
st := sv.Type()
|
st := sv.Type()
|
||||||
sprops := GetProperties(st)
|
sprops := GetProperties(st)
|
||||||
for i := 0; i < sv.NumField(); i++ {
|
for i := 0; i < sv.NumField(); i++ {
|
||||||
@ -234,10 +321,10 @@ func writeStruct(w *textWriter, sv reflect.Value) error {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if len(props.Enum) > 0 {
|
if len(props.Enum) > 0 {
|
||||||
if err := writeEnum(w, v, props); err != nil {
|
if err := tm.writeEnum(w, v, props); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
} else if err := writeAny(w, v, props); err != nil {
|
} else if err := tm.writeAny(w, v, props); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := w.WriteByte('\n'); err != nil {
|
if err := w.WriteByte('\n'); err != nil {
|
||||||
@ -279,7 +366,7 @@ func writeStruct(w *textWriter, sv reflect.Value) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if err := writeAny(w, key, props.mkeyprop); err != nil {
|
if err := tm.writeAny(w, key, props.mkeyprop); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := w.WriteByte('\n'); err != nil {
|
if err := w.WriteByte('\n'); err != nil {
|
||||||
@ -296,7 +383,7 @@ func writeStruct(w *textWriter, sv reflect.Value) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if err := writeAny(w, val, props.mvalprop); err != nil {
|
if err := tm.writeAny(w, val, props.mvalprop); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := w.WriteByte('\n'); err != nil {
|
if err := w.WriteByte('\n'); err != nil {
|
||||||
@ -368,10 +455,10 @@ func writeStruct(w *textWriter, sv reflect.Value) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if len(props.Enum) > 0 {
|
if len(props.Enum) > 0 {
|
||||||
if err := writeEnum(w, fv, props); err != nil {
|
if err := tm.writeEnum(w, fv, props); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
} else if err := writeAny(w, fv, props); err != nil {
|
} else if err := tm.writeAny(w, fv, props); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -389,7 +476,7 @@ func writeStruct(w *textWriter, sv reflect.Value) error {
|
|||||||
pv.Elem().Set(sv)
|
pv.Elem().Set(sv)
|
||||||
}
|
}
|
||||||
if pv.Type().Implements(extensionRangeType) {
|
if pv.Type().Implements(extensionRangeType) {
|
||||||
if err := writeExtensions(w, pv); err != nil {
|
if err := tm.writeExtensions(w, pv); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -419,10 +506,11 @@ func writeRaw(w *textWriter, b []byte) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// writeAny writes an arbitrary field.
|
// writeAny writes an arbitrary field.
|
||||||
func writeAny(w *textWriter, v reflect.Value, props *Properties) error {
|
func (tm *TextMarshaler) writeAny(w *textWriter, v reflect.Value, props *Properties) error {
|
||||||
v = reflect.Indirect(v)
|
v = reflect.Indirect(v)
|
||||||
|
|
||||||
if props != nil && len(props.CustomType) > 0 {
|
if props != nil {
|
||||||
|
if len(props.CustomType) > 0 {
|
||||||
custom, ok := v.Interface().(Marshaler)
|
custom, ok := v.Interface().(Marshaler)
|
||||||
if ok {
|
if ok {
|
||||||
data, err := custom.Marshal()
|
data, err := custom.Marshal()
|
||||||
@ -434,6 +522,30 @@ func writeAny(w *textWriter, v reflect.Value, props *Properties) error {
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
} else if props.StdTime {
|
||||||
|
t, ok := v.Interface().(time.Time)
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf("stdtime is not time.Time, but %T", v.Interface())
|
||||||
|
}
|
||||||
|
tproto, err := timestampProto(t)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
props.StdTime = false
|
||||||
|
err = tm.writeAny(w, reflect.ValueOf(tproto), props)
|
||||||
|
props.StdTime = true
|
||||||
|
return err
|
||||||
|
} else if props.StdDuration {
|
||||||
|
d, ok := v.Interface().(time.Duration)
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf("stdtime is not time.Duration, but %T", v.Interface())
|
||||||
|
}
|
||||||
|
dproto := durationProto(d)
|
||||||
|
props.StdDuration = false
|
||||||
|
err := tm.writeAny(w, reflect.ValueOf(dproto), props)
|
||||||
|
props.StdDuration = true
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Floats have special cases.
|
// Floats have special cases.
|
||||||
@ -482,15 +594,15 @@ func writeAny(w *textWriter, v reflect.Value, props *Properties) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
w.indent()
|
w.indent()
|
||||||
if tm, ok := v.Interface().(encoding.TextMarshaler); ok {
|
if etm, ok := v.Interface().(encoding.TextMarshaler); ok {
|
||||||
text, err := tm.MarshalText()
|
text, err := etm.MarshalText()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if _, err = w.Write(text); err != nil {
|
if _, err = w.Write(text); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
} else if err := writeStruct(w, v); err != nil {
|
} else if err := tm.writeStruct(w, v); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
w.unindent()
|
w.unindent()
|
||||||
@ -634,7 +746,7 @@ func (s int32Slice) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
|
|||||||
|
|
||||||
// writeExtensions writes all the extensions in pv.
|
// writeExtensions writes all the extensions in pv.
|
||||||
// pv is assumed to be a pointer to a protocol message struct that is extendable.
|
// pv is assumed to be a pointer to a protocol message struct that is extendable.
|
||||||
func writeExtensions(w *textWriter, pv reflect.Value) error {
|
func (tm *TextMarshaler) writeExtensions(w *textWriter, pv reflect.Value) error {
|
||||||
emap := extensionMaps[pv.Type().Elem()]
|
emap := extensionMaps[pv.Type().Elem()]
|
||||||
e := pv.Interface().(Message)
|
e := pv.Interface().(Message)
|
||||||
|
|
||||||
@ -689,13 +801,13 @@ func writeExtensions(w *textWriter, pv reflect.Value) error {
|
|||||||
|
|
||||||
// Repeated extensions will appear as a slice.
|
// Repeated extensions will appear as a slice.
|
||||||
if !desc.repeated() {
|
if !desc.repeated() {
|
||||||
if err := writeExtension(w, desc.Name, pb); err != nil {
|
if err := tm.writeExtension(w, desc.Name, pb); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
v := reflect.ValueOf(pb)
|
v := reflect.ValueOf(pb)
|
||||||
for i := 0; i < v.Len(); i++ {
|
for i := 0; i < v.Len(); i++ {
|
||||||
if err := writeExtension(w, desc.Name, v.Index(i).Interface()); err != nil {
|
if err := tm.writeExtension(w, desc.Name, v.Index(i).Interface()); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -704,7 +816,7 @@ func writeExtensions(w *textWriter, pv reflect.Value) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func writeExtension(w *textWriter, name string, pb interface{}) error {
|
func (tm *TextMarshaler) writeExtension(w *textWriter, name string, pb interface{}) error {
|
||||||
if _, err := fmt.Fprintf(w, "[%s]:", name); err != nil {
|
if _, err := fmt.Fprintf(w, "[%s]:", name); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -713,7 +825,7 @@ func writeExtension(w *textWriter, name string, pb interface{}) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if err := writeAny(w, reflect.ValueOf(pb), nil); err != nil {
|
if err := tm.writeAny(w, reflect.ValueOf(pb), nil); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := w.WriteByte('\n'); err != nil {
|
if err := w.WriteByte('\n'); err != nil {
|
||||||
@ -741,11 +853,12 @@ func (w *textWriter) writeIndent() {
|
|||||||
// TextMarshaler is a configurable text format marshaler.
|
// TextMarshaler is a configurable text format marshaler.
|
||||||
type TextMarshaler struct {
|
type TextMarshaler struct {
|
||||||
Compact bool // use compact text format (one line).
|
Compact bool // use compact text format (one line).
|
||||||
|
ExpandAny bool // expand google.protobuf.Any messages of known types
|
||||||
}
|
}
|
||||||
|
|
||||||
// Marshal writes a given protocol buffer in text format.
|
// Marshal writes a given protocol buffer in text format.
|
||||||
// The only errors returned are from w.
|
// The only errors returned are from w.
|
||||||
func (m *TextMarshaler) Marshal(w io.Writer, pb Message) error {
|
func (tm *TextMarshaler) Marshal(w io.Writer, pb Message) error {
|
||||||
val := reflect.ValueOf(pb)
|
val := reflect.ValueOf(pb)
|
||||||
if pb == nil || val.IsNil() {
|
if pb == nil || val.IsNil() {
|
||||||
w.Write([]byte("<nil>"))
|
w.Write([]byte("<nil>"))
|
||||||
@ -760,11 +873,11 @@ func (m *TextMarshaler) Marshal(w io.Writer, pb Message) error {
|
|||||||
aw := &textWriter{
|
aw := &textWriter{
|
||||||
w: ww,
|
w: ww,
|
||||||
complete: true,
|
complete: true,
|
||||||
compact: m.Compact,
|
compact: tm.Compact,
|
||||||
}
|
}
|
||||||
|
|
||||||
if tm, ok := pb.(encoding.TextMarshaler); ok {
|
if etm, ok := pb.(encoding.TextMarshaler); ok {
|
||||||
text, err := tm.MarshalText()
|
text, err := etm.MarshalText()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -778,7 +891,7 @@ func (m *TextMarshaler) Marshal(w io.Writer, pb Message) error {
|
|||||||
}
|
}
|
||||||
// Dereference the received pointer so we don't have outer < and >.
|
// Dereference the received pointer so we don't have outer < and >.
|
||||||
v := reflect.Indirect(val)
|
v := reflect.Indirect(val)
|
||||||
if err := writeStruct(aw, v); err != nil {
|
if err := tm.writeStruct(aw, v); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if bw != nil {
|
if bw != nil {
|
||||||
@ -788,9 +901,9 @@ func (m *TextMarshaler) Marshal(w io.Writer, pb Message) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Text is the same as Marshal, but returns the string directly.
|
// Text is the same as Marshal, but returns the string directly.
|
||||||
func (m *TextMarshaler) Text(pb Message) string {
|
func (tm *TextMarshaler) Text(pb Message) string {
|
||||||
var buf bytes.Buffer
|
var buf bytes.Buffer
|
||||||
m.Marshal(&buf, pb)
|
tm.Marshal(&buf, pb)
|
||||||
return buf.String()
|
return buf.String()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
6
cmd/vendor/github.com/gogo/protobuf/proto/text_gogo.go
generated
vendored
6
cmd/vendor/github.com/gogo/protobuf/proto/text_gogo.go
generated
vendored
@ -33,10 +33,10 @@ import (
|
|||||||
"reflect"
|
"reflect"
|
||||||
)
|
)
|
||||||
|
|
||||||
func writeEnum(w *textWriter, v reflect.Value, props *Properties) error {
|
func (tm *TextMarshaler) writeEnum(w *textWriter, v reflect.Value, props *Properties) error {
|
||||||
m, ok := enumStringMaps[props.Enum]
|
m, ok := enumStringMaps[props.Enum]
|
||||||
if !ok {
|
if !ok {
|
||||||
if err := writeAny(w, v, props); err != nil {
|
if err := tm.writeAny(w, v, props); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -48,7 +48,7 @@ func writeEnum(w *textWriter, v reflect.Value, props *Properties) error {
|
|||||||
}
|
}
|
||||||
s, ok := m[key]
|
s, ok := m[key]
|
||||||
if !ok {
|
if !ok {
|
||||||
if err := writeAny(w, v, props); err != nil {
|
if err := tm.writeAny(w, v, props); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
189
cmd/vendor/github.com/gogo/protobuf/proto/text_parser.go
generated
vendored
189
cmd/vendor/github.com/gogo/protobuf/proto/text_parser.go
generated
vendored
@ -46,9 +46,13 @@ import (
|
|||||||
"reflect"
|
"reflect"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
"time"
|
||||||
"unicode/utf8"
|
"unicode/utf8"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Error string emitted when deserializing Any and fields are already set
|
||||||
|
const anyRepeatedlyUnpacked = "Any message unpacked multiple times, or %q already set"
|
||||||
|
|
||||||
type ParseError struct {
|
type ParseError struct {
|
||||||
Message string
|
Message string
|
||||||
Line int // 1-based line number
|
Line int // 1-based line number
|
||||||
@ -168,7 +172,7 @@ func (p *textParser) advance() {
|
|||||||
p.cur.offset, p.cur.line = p.offset, p.line
|
p.cur.offset, p.cur.line = p.offset, p.line
|
||||||
p.cur.unquoted = ""
|
p.cur.unquoted = ""
|
||||||
switch p.s[0] {
|
switch p.s[0] {
|
||||||
case '<', '>', '{', '}', ':', '[', ']', ';', ',':
|
case '<', '>', '{', '}', ':', '[', ']', ';', ',', '/':
|
||||||
// Single symbol
|
// Single symbol
|
||||||
p.cur.value, p.s = p.s[0:1], p.s[1:len(p.s)]
|
p.cur.value, p.s = p.s[0:1], p.s[1:len(p.s)]
|
||||||
case '"', '\'':
|
case '"', '\'':
|
||||||
@ -456,7 +460,10 @@ func (p *textParser) readStruct(sv reflect.Value, terminator string) error {
|
|||||||
fieldSet := make(map[string]bool)
|
fieldSet := make(map[string]bool)
|
||||||
// A struct is a sequence of "name: value", terminated by one of
|
// A struct is a sequence of "name: value", terminated by one of
|
||||||
// '>' or '}', or the end of the input. A name may also be
|
// '>' or '}', or the end of the input. A name may also be
|
||||||
// "[extension]".
|
// "[extension]" or "[type/url]".
|
||||||
|
//
|
||||||
|
// The whole struct can also be an expanded Any message, like:
|
||||||
|
// [type/url] < ... struct contents ... >
|
||||||
for {
|
for {
|
||||||
tok := p.next()
|
tok := p.next()
|
||||||
if tok.err != nil {
|
if tok.err != nil {
|
||||||
@ -466,33 +473,74 @@ func (p *textParser) readStruct(sv reflect.Value, terminator string) error {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
if tok.value == "[" {
|
if tok.value == "[" {
|
||||||
// Looks like an extension.
|
// Looks like an extension or an Any.
|
||||||
//
|
//
|
||||||
// TODO: Check whether we need to handle
|
// TODO: Check whether we need to handle
|
||||||
// namespace rooted names (e.g. ".something.Foo").
|
// namespace rooted names (e.g. ".something.Foo").
|
||||||
|
extName, err := p.consumeExtName()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if s := strings.LastIndex(extName, "/"); s >= 0 {
|
||||||
|
// If it contains a slash, it's an Any type URL.
|
||||||
|
messageName := extName[s+1:]
|
||||||
|
mt := MessageType(messageName)
|
||||||
|
if mt == nil {
|
||||||
|
return p.errorf("unrecognized message %q in google.protobuf.Any", messageName)
|
||||||
|
}
|
||||||
tok = p.next()
|
tok = p.next()
|
||||||
if tok.err != nil {
|
if tok.err != nil {
|
||||||
return tok.err
|
return tok.err
|
||||||
}
|
}
|
||||||
|
// consume an optional colon
|
||||||
|
if tok.value == ":" {
|
||||||
|
tok = p.next()
|
||||||
|
if tok.err != nil {
|
||||||
|
return tok.err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var terminator string
|
||||||
|
switch tok.value {
|
||||||
|
case "<":
|
||||||
|
terminator = ">"
|
||||||
|
case "{":
|
||||||
|
terminator = "}"
|
||||||
|
default:
|
||||||
|
return p.errorf("expected '{' or '<', found %q", tok.value)
|
||||||
|
}
|
||||||
|
v := reflect.New(mt.Elem())
|
||||||
|
if pe := p.readStruct(v.Elem(), terminator); pe != nil {
|
||||||
|
return pe
|
||||||
|
}
|
||||||
|
b, err := Marshal(v.Interface().(Message))
|
||||||
|
if err != nil {
|
||||||
|
return p.errorf("failed to marshal message of type %q: %v", messageName, err)
|
||||||
|
}
|
||||||
|
if fieldSet["type_url"] {
|
||||||
|
return p.errorf(anyRepeatedlyUnpacked, "type_url")
|
||||||
|
}
|
||||||
|
if fieldSet["value"] {
|
||||||
|
return p.errorf(anyRepeatedlyUnpacked, "value")
|
||||||
|
}
|
||||||
|
sv.FieldByName("TypeUrl").SetString(extName)
|
||||||
|
sv.FieldByName("Value").SetBytes(b)
|
||||||
|
fieldSet["type_url"] = true
|
||||||
|
fieldSet["value"] = true
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
var desc *ExtensionDesc
|
var desc *ExtensionDesc
|
||||||
// This could be faster, but it's functional.
|
// This could be faster, but it's functional.
|
||||||
// TODO: Do something smarter than a linear scan.
|
// TODO: Do something smarter than a linear scan.
|
||||||
for _, d := range RegisteredExtensions(reflect.New(st).Interface().(Message)) {
|
for _, d := range RegisteredExtensions(reflect.New(st).Interface().(Message)) {
|
||||||
if d.Name == tok.value {
|
if d.Name == extName {
|
||||||
desc = d
|
desc = d
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if desc == nil {
|
if desc == nil {
|
||||||
return p.errorf("unrecognized extension %q", tok.value)
|
return p.errorf("unrecognized extension %q", extName)
|
||||||
}
|
|
||||||
// Check the extension terminator.
|
|
||||||
tok = p.next()
|
|
||||||
if tok.err != nil {
|
|
||||||
return tok.err
|
|
||||||
}
|
|
||||||
if tok.value != "]" {
|
|
||||||
return p.errorf("unrecognized extension terminator %q", tok.value)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
props := &Properties{}
|
props := &Properties{}
|
||||||
@ -550,7 +598,11 @@ func (p *textParser) readStruct(sv reflect.Value, terminator string) error {
|
|||||||
props = oop.Prop
|
props = oop.Prop
|
||||||
nv := reflect.New(oop.Type.Elem())
|
nv := reflect.New(oop.Type.Elem())
|
||||||
dst = nv.Elem().Field(0)
|
dst = nv.Elem().Field(0)
|
||||||
sv.Field(oop.Field).Set(nv)
|
field := sv.Field(oop.Field)
|
||||||
|
if !field.IsNil() {
|
||||||
|
return p.errorf("field '%s' would overwrite already parsed oneof '%s'", name, sv.Type().Field(oop.Field).Name)
|
||||||
|
}
|
||||||
|
field.Set(nv)
|
||||||
}
|
}
|
||||||
if !dst.IsValid() {
|
if !dst.IsValid() {
|
||||||
return p.errorf("unknown field name %q in %v", name, st)
|
return p.errorf("unknown field name %q in %v", name, st)
|
||||||
@ -657,6 +709,35 @@ func (p *textParser) readStruct(sv reflect.Value, terminator string) error {
|
|||||||
return reqFieldErr
|
return reqFieldErr
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// consumeExtName consumes extension name or expanded Any type URL and the
|
||||||
|
// following ']'. It returns the name or URL consumed.
|
||||||
|
func (p *textParser) consumeExtName() (string, error) {
|
||||||
|
tok := p.next()
|
||||||
|
if tok.err != nil {
|
||||||
|
return "", tok.err
|
||||||
|
}
|
||||||
|
|
||||||
|
// If extension name or type url is quoted, it's a single token.
|
||||||
|
if len(tok.value) > 2 && isQuote(tok.value[0]) && tok.value[len(tok.value)-1] == tok.value[0] {
|
||||||
|
name, err := unquoteC(tok.value[1:len(tok.value)-1], rune(tok.value[0]))
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
return name, p.consumeToken("]")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Consume everything up to "]"
|
||||||
|
var parts []string
|
||||||
|
for tok.value != "]" {
|
||||||
|
parts = append(parts, tok.value)
|
||||||
|
tok = p.next()
|
||||||
|
if tok.err != nil {
|
||||||
|
return "", p.errorf("unrecognized type_url or extension name: %s", tok.err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return strings.Join(parts, ""), nil
|
||||||
|
}
|
||||||
|
|
||||||
// consumeOptionalSeparator consumes an optional semicolon or comma.
|
// consumeOptionalSeparator consumes an optional semicolon or comma.
|
||||||
// It is used in readStruct to provide backward compatibility.
|
// It is used in readStruct to provide backward compatibility.
|
||||||
func (p *textParser) consumeOptionalSeparator() error {
|
func (p *textParser) consumeOptionalSeparator() error {
|
||||||
@ -717,6 +798,80 @@ func (p *textParser) readAny(v reflect.Value, props *Properties) error {
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
if props.StdTime {
|
||||||
|
fv := v
|
||||||
|
p.back()
|
||||||
|
props.StdTime = false
|
||||||
|
tproto := ×tamp{}
|
||||||
|
err := p.readAny(reflect.ValueOf(tproto).Elem(), props)
|
||||||
|
props.StdTime = true
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
tim, err := timestampFromProto(tproto)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if props.Repeated {
|
||||||
|
t := reflect.TypeOf(v.Interface())
|
||||||
|
if t.Kind() == reflect.Slice {
|
||||||
|
if t.Elem().Kind() == reflect.Ptr {
|
||||||
|
ts := fv.Interface().([]*time.Time)
|
||||||
|
ts = append(ts, &tim)
|
||||||
|
fv.Set(reflect.ValueOf(ts))
|
||||||
|
return nil
|
||||||
|
} else {
|
||||||
|
ts := fv.Interface().([]time.Time)
|
||||||
|
ts = append(ts, tim)
|
||||||
|
fv.Set(reflect.ValueOf(ts))
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if reflect.TypeOf(v.Interface()).Kind() == reflect.Ptr {
|
||||||
|
v.Set(reflect.ValueOf(&tim))
|
||||||
|
} else {
|
||||||
|
v.Set(reflect.Indirect(reflect.ValueOf(&tim)))
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
if props.StdDuration {
|
||||||
|
fv := v
|
||||||
|
p.back()
|
||||||
|
props.StdDuration = false
|
||||||
|
dproto := &duration{}
|
||||||
|
err := p.readAny(reflect.ValueOf(dproto).Elem(), props)
|
||||||
|
props.StdDuration = true
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
dur, err := durationFromProto(dproto)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if props.Repeated {
|
||||||
|
t := reflect.TypeOf(v.Interface())
|
||||||
|
if t.Kind() == reflect.Slice {
|
||||||
|
if t.Elem().Kind() == reflect.Ptr {
|
||||||
|
ds := fv.Interface().([]*time.Duration)
|
||||||
|
ds = append(ds, &dur)
|
||||||
|
fv.Set(reflect.ValueOf(ds))
|
||||||
|
return nil
|
||||||
|
} else {
|
||||||
|
ds := fv.Interface().([]time.Duration)
|
||||||
|
ds = append(ds, dur)
|
||||||
|
fv.Set(reflect.ValueOf(ds))
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if reflect.TypeOf(v.Interface()).Kind() == reflect.Ptr {
|
||||||
|
v.Set(reflect.ValueOf(&dur))
|
||||||
|
} else {
|
||||||
|
v.Set(reflect.Indirect(reflect.ValueOf(&dur)))
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
switch fv := v; fv.Kind() {
|
switch fv := v; fv.Kind() {
|
||||||
case reflect.Slice:
|
case reflect.Slice:
|
||||||
at := v.Type()
|
at := v.Type()
|
||||||
@ -759,12 +914,12 @@ func (p *textParser) readAny(v reflect.Value, props *Properties) error {
|
|||||||
fv.Set(reflect.Append(fv, reflect.New(at.Elem()).Elem()))
|
fv.Set(reflect.Append(fv, reflect.New(at.Elem()).Elem()))
|
||||||
return p.readAny(fv.Index(fv.Len()-1), props)
|
return p.readAny(fv.Index(fv.Len()-1), props)
|
||||||
case reflect.Bool:
|
case reflect.Bool:
|
||||||
// Either "true", "false", 1 or 0.
|
// true/1/t/True or false/f/0/False.
|
||||||
switch tok.value {
|
switch tok.value {
|
||||||
case "true", "1":
|
case "true", "1", "t", "True":
|
||||||
fv.SetBool(true)
|
fv.SetBool(true)
|
||||||
return nil
|
return nil
|
||||||
case "false", "0":
|
case "false", "0", "f", "False":
|
||||||
fv.SetBool(false)
|
fv.SetBool(false)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
113
cmd/vendor/github.com/gogo/protobuf/proto/timestamp.go
generated
vendored
Normal file
113
cmd/vendor/github.com/gogo/protobuf/proto/timestamp.go
generated
vendored
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
// Go support for Protocol Buffers - Google's data interchange format
|
||||||
|
//
|
||||||
|
// Copyright 2016 The Go Authors. All rights reserved.
|
||||||
|
// https://github.com/golang/protobuf
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are
|
||||||
|
// met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above
|
||||||
|
// copyright notice, this list of conditions and the following disclaimer
|
||||||
|
// in the documentation and/or other materials provided with the
|
||||||
|
// distribution.
|
||||||
|
// * Neither the name of Google Inc. nor the names of its
|
||||||
|
// contributors may be used to endorse or promote products derived from
|
||||||
|
// this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
package proto
|
||||||
|
|
||||||
|
// This file implements operations on google.protobuf.Timestamp.
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
// Seconds field of the earliest valid Timestamp.
|
||||||
|
// This is time.Date(1, 1, 1, 0, 0, 0, 0, time.UTC).Unix().
|
||||||
|
minValidSeconds = -62135596800
|
||||||
|
// Seconds field just after the latest valid Timestamp.
|
||||||
|
// This is time.Date(10000, 1, 1, 0, 0, 0, 0, time.UTC).Unix().
|
||||||
|
maxValidSeconds = 253402300800
|
||||||
|
)
|
||||||
|
|
||||||
|
// validateTimestamp determines whether a Timestamp is valid.
|
||||||
|
// A valid timestamp represents a time in the range
|
||||||
|
// [0001-01-01, 10000-01-01) and has a Nanos field
|
||||||
|
// in the range [0, 1e9).
|
||||||
|
//
|
||||||
|
// If the Timestamp is valid, validateTimestamp returns nil.
|
||||||
|
// Otherwise, it returns an error that describes
|
||||||
|
// the problem.
|
||||||
|
//
|
||||||
|
// Every valid Timestamp can be represented by a time.Time, but the converse is not true.
|
||||||
|
func validateTimestamp(ts *timestamp) error {
|
||||||
|
if ts == nil {
|
||||||
|
return errors.New("timestamp: nil Timestamp")
|
||||||
|
}
|
||||||
|
if ts.Seconds < minValidSeconds {
|
||||||
|
return fmt.Errorf("timestamp: %#v before 0001-01-01", ts)
|
||||||
|
}
|
||||||
|
if ts.Seconds >= maxValidSeconds {
|
||||||
|
return fmt.Errorf("timestamp: %#v after 10000-01-01", ts)
|
||||||
|
}
|
||||||
|
if ts.Nanos < 0 || ts.Nanos >= 1e9 {
|
||||||
|
return fmt.Errorf("timestamp: %#v: nanos not in range [0, 1e9)", ts)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// TimestampFromProto converts a google.protobuf.Timestamp proto to a time.Time.
|
||||||
|
// It returns an error if the argument is invalid.
|
||||||
|
//
|
||||||
|
// Unlike most Go functions, if Timestamp returns an error, the first return value
|
||||||
|
// is not the zero time.Time. Instead, it is the value obtained from the
|
||||||
|
// time.Unix function when passed the contents of the Timestamp, in the UTC
|
||||||
|
// locale. This may or may not be a meaningful time; many invalid Timestamps
|
||||||
|
// do map to valid time.Times.
|
||||||
|
//
|
||||||
|
// A nil Timestamp returns an error. The first return value in that case is
|
||||||
|
// undefined.
|
||||||
|
func timestampFromProto(ts *timestamp) (time.Time, error) {
|
||||||
|
// Don't return the zero value on error, because corresponds to a valid
|
||||||
|
// timestamp. Instead return whatever time.Unix gives us.
|
||||||
|
var t time.Time
|
||||||
|
if ts == nil {
|
||||||
|
t = time.Unix(0, 0).UTC() // treat nil like the empty Timestamp
|
||||||
|
} else {
|
||||||
|
t = time.Unix(ts.Seconds, int64(ts.Nanos)).UTC()
|
||||||
|
}
|
||||||
|
return t, validateTimestamp(ts)
|
||||||
|
}
|
||||||
|
|
||||||
|
// TimestampProto converts the time.Time to a google.protobuf.Timestamp proto.
|
||||||
|
// It returns an error if the resulting Timestamp is invalid.
|
||||||
|
func timestampProto(t time.Time) (*timestamp, error) {
|
||||||
|
seconds := t.Unix()
|
||||||
|
nanos := int32(t.Sub(time.Unix(seconds, 0)))
|
||||||
|
ts := ×tamp{
|
||||||
|
Seconds: seconds,
|
||||||
|
Nanos: nanos,
|
||||||
|
}
|
||||||
|
if err := validateTimestamp(ts); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return ts, nil
|
||||||
|
}
|
229
cmd/vendor/github.com/gogo/protobuf/proto/timestamp_gogo.go
generated
vendored
Normal file
229
cmd/vendor/github.com/gogo/protobuf/proto/timestamp_gogo.go
generated
vendored
Normal file
@ -0,0 +1,229 @@
|
|||||||
|
// Protocol Buffers for Go with Gadgets
|
||||||
|
//
|
||||||
|
// Copyright (c) 2016, The GoGo Authors. All rights reserved.
|
||||||
|
// http://github.com/gogo/protobuf
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are
|
||||||
|
// met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above
|
||||||
|
// copyright notice, this list of conditions and the following disclaimer
|
||||||
|
// in the documentation and/or other materials provided with the
|
||||||
|
// distribution.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
package proto
|
||||||
|
|
||||||
|
import (
|
||||||
|
"reflect"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
var timeType = reflect.TypeOf((*time.Time)(nil)).Elem()
|
||||||
|
|
||||||
|
type timestamp struct {
|
||||||
|
Seconds int64 `protobuf:"varint,1,opt,name=seconds,proto3" json:"seconds,omitempty"`
|
||||||
|
Nanos int32 `protobuf:"varint,2,opt,name=nanos,proto3" json:"nanos,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *timestamp) Reset() { *m = timestamp{} }
|
||||||
|
func (*timestamp) ProtoMessage() {}
|
||||||
|
func (*timestamp) String() string { return "timestamp<string>" }
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
RegisterType((*timestamp)(nil), "gogo.protobuf.proto.timestamp")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Buffer) decTimestamp() (time.Time, error) {
|
||||||
|
b, err := o.DecodeRawBytes(true)
|
||||||
|
if err != nil {
|
||||||
|
return time.Time{}, err
|
||||||
|
}
|
||||||
|
tproto := ×tamp{}
|
||||||
|
if err := Unmarshal(b, tproto); err != nil {
|
||||||
|
return time.Time{}, err
|
||||||
|
}
|
||||||
|
return timestampFromProto(tproto)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Buffer) dec_time(p *Properties, base structPointer) error {
|
||||||
|
t, err := o.decTimestamp()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
setPtrCustomType(base, p.field, &t)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Buffer) dec_ref_time(p *Properties, base structPointer) error {
|
||||||
|
t, err := o.decTimestamp()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
setCustomType(base, p.field, &t)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Buffer) dec_slice_time(p *Properties, base structPointer) error {
|
||||||
|
t, err := o.decTimestamp()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
newBas := appendStructPointer(base, p.field, reflect.SliceOf(reflect.PtrTo(timeType)))
|
||||||
|
var zero field
|
||||||
|
setPtrCustomType(newBas, zero, &t)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Buffer) dec_slice_ref_time(p *Properties, base structPointer) error {
|
||||||
|
t, err := o.decTimestamp()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
newBas := appendStructPointer(base, p.field, reflect.SliceOf(timeType))
|
||||||
|
var zero field
|
||||||
|
setCustomType(newBas, zero, &t)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func size_time(p *Properties, base structPointer) (n int) {
|
||||||
|
structp := structPointer_GetStructPointer(base, p.field)
|
||||||
|
if structPointer_IsNil(structp) {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
tim := structPointer_Interface(structp, timeType).(*time.Time)
|
||||||
|
t, err := timestampProto(*tim)
|
||||||
|
if err != nil {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
size := Size(t)
|
||||||
|
return size + sizeVarint(uint64(size)) + len(p.tagcode)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Buffer) enc_time(p *Properties, base structPointer) error {
|
||||||
|
structp := structPointer_GetStructPointer(base, p.field)
|
||||||
|
if structPointer_IsNil(structp) {
|
||||||
|
return ErrNil
|
||||||
|
}
|
||||||
|
tim := structPointer_Interface(structp, timeType).(*time.Time)
|
||||||
|
t, err := timestampProto(*tim)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
data, err := Marshal(t)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
o.buf = append(o.buf, p.tagcode...)
|
||||||
|
o.EncodeRawBytes(data)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func size_ref_time(p *Properties, base structPointer) (n int) {
|
||||||
|
tim := structPointer_InterfaceAt(base, p.field, timeType).(*time.Time)
|
||||||
|
t, err := timestampProto(*tim)
|
||||||
|
if err != nil {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
size := Size(t)
|
||||||
|
return size + sizeVarint(uint64(size)) + len(p.tagcode)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Buffer) enc_ref_time(p *Properties, base structPointer) error {
|
||||||
|
tim := structPointer_InterfaceAt(base, p.field, timeType).(*time.Time)
|
||||||
|
t, err := timestampProto(*tim)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
data, err := Marshal(t)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
o.buf = append(o.buf, p.tagcode...)
|
||||||
|
o.EncodeRawBytes(data)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func size_slice_time(p *Properties, base structPointer) (n int) {
|
||||||
|
ptims := structPointer_InterfaceAt(base, p.field, reflect.SliceOf(reflect.PtrTo(timeType))).(*[]*time.Time)
|
||||||
|
tims := *ptims
|
||||||
|
for i := 0; i < len(tims); i++ {
|
||||||
|
if tims[i] == nil {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
tproto, err := timestampProto(*tims[i])
|
||||||
|
if err != nil {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
size := Size(tproto)
|
||||||
|
n += len(p.tagcode) + size + sizeVarint(uint64(size))
|
||||||
|
}
|
||||||
|
return n
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Buffer) enc_slice_time(p *Properties, base structPointer) error {
|
||||||
|
ptims := structPointer_InterfaceAt(base, p.field, reflect.SliceOf(reflect.PtrTo(timeType))).(*[]*time.Time)
|
||||||
|
tims := *ptims
|
||||||
|
for i := 0; i < len(tims); i++ {
|
||||||
|
if tims[i] == nil {
|
||||||
|
return errRepeatedHasNil
|
||||||
|
}
|
||||||
|
tproto, err := timestampProto(*tims[i])
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
data, err := Marshal(tproto)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
o.buf = append(o.buf, p.tagcode...)
|
||||||
|
o.EncodeRawBytes(data)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func size_slice_ref_time(p *Properties, base structPointer) (n int) {
|
||||||
|
ptims := structPointer_InterfaceAt(base, p.field, reflect.SliceOf(timeType)).(*[]time.Time)
|
||||||
|
tims := *ptims
|
||||||
|
for i := 0; i < len(tims); i++ {
|
||||||
|
tproto, err := timestampProto(tims[i])
|
||||||
|
if err != nil {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
size := Size(tproto)
|
||||||
|
n += len(p.tagcode) + size + sizeVarint(uint64(size))
|
||||||
|
}
|
||||||
|
return n
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Buffer) enc_slice_ref_time(p *Properties, base structPointer) error {
|
||||||
|
ptims := structPointer_InterfaceAt(base, p.field, reflect.SliceOf(timeType)).(*[]time.Time)
|
||||||
|
tims := *ptims
|
||||||
|
for i := 0; i < len(tims); i++ {
|
||||||
|
tproto, err := timestampProto(tims[i])
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
data, err := Marshal(tproto)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
o.buf = append(o.buf, p.tagcode...)
|
||||||
|
o.EncodeRawBytes(data)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
260
cmd/vendor/github.com/golang/protobuf/jsonpb/jsonpb.go
generated
vendored
260
cmd/vendor/github.com/golang/protobuf/jsonpb/jsonpb.go
generated
vendored
@ -44,6 +44,7 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
"math"
|
||||||
"reflect"
|
"reflect"
|
||||||
"sort"
|
"sort"
|
||||||
"strconv"
|
"strconv"
|
||||||
@ -51,6 +52,8 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/golang/protobuf/proto"
|
"github.com/golang/protobuf/proto"
|
||||||
|
|
||||||
|
stpb "github.com/golang/protobuf/ptypes/struct"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Marshaler is a configurable object for converting between
|
// Marshaler is a configurable object for converting between
|
||||||
@ -72,6 +75,22 @@ type Marshaler struct {
|
|||||||
OrigName bool
|
OrigName bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// JSONPBMarshaler is implemented by protobuf messages that customize the
|
||||||
|
// way they are marshaled to JSON. Messages that implement this should
|
||||||
|
// also implement JSONPBUnmarshaler so that the custom format can be
|
||||||
|
// parsed.
|
||||||
|
type JSONPBMarshaler interface {
|
||||||
|
MarshalJSONPB(*Marshaler) ([]byte, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
// JSONPBUnmarshaler is implemented by protobuf messages that customize
|
||||||
|
// the way they are unmarshaled from JSON. Messages that implement this
|
||||||
|
// should also implement JSONPBMarshaler so that the custom format can be
|
||||||
|
// produced.
|
||||||
|
type JSONPBUnmarshaler interface {
|
||||||
|
UnmarshalJSONPB(*Unmarshaler, []byte) error
|
||||||
|
}
|
||||||
|
|
||||||
// Marshal marshals a protocol buffer into JSON.
|
// Marshal marshals a protocol buffer into JSON.
|
||||||
func (m *Marshaler) Marshal(out io.Writer, pb proto.Message) error {
|
func (m *Marshaler) Marshal(out io.Writer, pb proto.Message) error {
|
||||||
writer := &errWriter{writer: out}
|
writer := &errWriter{writer: out}
|
||||||
@ -89,6 +108,12 @@ func (m *Marshaler) MarshalToString(pb proto.Message) (string, error) {
|
|||||||
|
|
||||||
type int32Slice []int32
|
type int32Slice []int32
|
||||||
|
|
||||||
|
var nonFinite = map[string]float64{
|
||||||
|
`"NaN"`: math.NaN(),
|
||||||
|
`"Infinity"`: math.Inf(1),
|
||||||
|
`"-Infinity"`: math.Inf(-1),
|
||||||
|
}
|
||||||
|
|
||||||
// For sorting extensions ids to ensure stable output.
|
// For sorting extensions ids to ensure stable output.
|
||||||
func (s int32Slice) Len() int { return len(s) }
|
func (s int32Slice) Len() int { return len(s) }
|
||||||
func (s int32Slice) Less(i, j int) bool { return s[i] < s[j] }
|
func (s int32Slice) Less(i, j int) bool { return s[i] < s[j] }
|
||||||
@ -100,6 +125,31 @@ type wkt interface {
|
|||||||
|
|
||||||
// marshalObject writes a struct to the Writer.
|
// marshalObject writes a struct to the Writer.
|
||||||
func (m *Marshaler) marshalObject(out *errWriter, v proto.Message, indent, typeURL string) error {
|
func (m *Marshaler) marshalObject(out *errWriter, v proto.Message, indent, typeURL string) error {
|
||||||
|
if jsm, ok := v.(JSONPBMarshaler); ok {
|
||||||
|
b, err := jsm.MarshalJSONPB(m)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if typeURL != "" {
|
||||||
|
// we are marshaling this object to an Any type
|
||||||
|
var js map[string]*json.RawMessage
|
||||||
|
if err = json.Unmarshal(b, &js); err != nil {
|
||||||
|
return fmt.Errorf("type %T produced invalid JSON: %v", v, err)
|
||||||
|
}
|
||||||
|
turl, err := json.Marshal(typeURL)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to marshal type URL %q to JSON: %v", typeURL, err)
|
||||||
|
}
|
||||||
|
js["@type"] = (*json.RawMessage)(&turl)
|
||||||
|
if b, err = json.Marshal(js); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
out.write(string(b))
|
||||||
|
return out.err
|
||||||
|
}
|
||||||
|
|
||||||
s := reflect.ValueOf(v).Elem()
|
s := reflect.ValueOf(v).Elem()
|
||||||
|
|
||||||
// Handle well-known types.
|
// Handle well-known types.
|
||||||
@ -126,8 +176,8 @@ func (m *Marshaler) marshalObject(out *errWriter, v proto.Message, indent, typeU
|
|||||||
out.write(x)
|
out.write(x)
|
||||||
out.write(`s"`)
|
out.write(`s"`)
|
||||||
return out.err
|
return out.err
|
||||||
case "Struct":
|
case "Struct", "ListValue":
|
||||||
// Let marshalValue handle the `fields` map.
|
// Let marshalValue handle the `Struct.fields` map or the `ListValue.values` slice.
|
||||||
// TODO: pass the correct Properties if needed.
|
// TODO: pass the correct Properties if needed.
|
||||||
return m.marshalValue(out, &proto.Properties{}, s.Field(0), indent)
|
return m.marshalValue(out, &proto.Properties{}, s.Field(0), indent)
|
||||||
case "Timestamp":
|
case "Timestamp":
|
||||||
@ -180,7 +230,7 @@ func (m *Marshaler) marshalObject(out *errWriter, v proto.Message, indent, typeU
|
|||||||
|
|
||||||
// IsNil will panic on most value kinds.
|
// IsNil will panic on most value kinds.
|
||||||
switch value.Kind() {
|
switch value.Kind() {
|
||||||
case reflect.Chan, reflect.Func, reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice:
|
case reflect.Chan, reflect.Func, reflect.Interface:
|
||||||
if value.IsNil() {
|
if value.IsNil() {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
@ -208,6 +258,10 @@ func (m *Marshaler) marshalObject(out *errWriter, v proto.Message, indent, typeU
|
|||||||
if value.Len() == 0 {
|
if value.Len() == 0 {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
case reflect.Map, reflect.Ptr, reflect.Slice:
|
||||||
|
if value.IsNil() {
|
||||||
|
continue
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -371,10 +425,15 @@ func (m *Marshaler) marshalField(out *errWriter, prop *proto.Properties, v refle
|
|||||||
|
|
||||||
// marshalValue writes the value to the Writer.
|
// marshalValue writes the value to the Writer.
|
||||||
func (m *Marshaler) marshalValue(out *errWriter, prop *proto.Properties, v reflect.Value, indent string) error {
|
func (m *Marshaler) marshalValue(out *errWriter, prop *proto.Properties, v reflect.Value, indent string) error {
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
v = reflect.Indirect(v)
|
v = reflect.Indirect(v)
|
||||||
|
|
||||||
|
// Handle nil pointer
|
||||||
|
if v.Kind() == reflect.Invalid {
|
||||||
|
out.write("null")
|
||||||
|
return out.err
|
||||||
|
}
|
||||||
|
|
||||||
// Handle repeated elements.
|
// Handle repeated elements.
|
||||||
if v.Kind() == reflect.Slice && v.Type().Elem().Kind() != reflect.Uint8 {
|
if v.Kind() == reflect.Slice && v.Type().Elem().Kind() != reflect.Uint8 {
|
||||||
out.write("[")
|
out.write("[")
|
||||||
@ -404,9 +463,6 @@ func (m *Marshaler) marshalValue(out *errWriter, prop *proto.Properties, v refle
|
|||||||
|
|
||||||
// Handle well-known types.
|
// Handle well-known types.
|
||||||
// Most are handled up in marshalObject (because 99% are messages).
|
// Most are handled up in marshalObject (because 99% are messages).
|
||||||
type wkt interface {
|
|
||||||
XXX_WellKnownType() string
|
|
||||||
}
|
|
||||||
if wkt, ok := v.Interface().(wkt); ok {
|
if wkt, ok := v.Interface().(wkt); ok {
|
||||||
switch wkt.XXX_WellKnownType() {
|
switch wkt.XXX_WellKnownType() {
|
||||||
case "NullValue":
|
case "NullValue":
|
||||||
@ -494,6 +550,24 @@ func (m *Marshaler) marshalValue(out *errWriter, prop *proto.Properties, v refle
|
|||||||
return out.err
|
return out.err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Handle non-finite floats, e.g. NaN, Infinity and -Infinity.
|
||||||
|
if v.Kind() == reflect.Float32 || v.Kind() == reflect.Float64 {
|
||||||
|
f := v.Float()
|
||||||
|
var sval string
|
||||||
|
switch {
|
||||||
|
case math.IsInf(f, 1):
|
||||||
|
sval = `"Infinity"`
|
||||||
|
case math.IsInf(f, -1):
|
||||||
|
sval = `"-Infinity"`
|
||||||
|
case math.IsNaN(f):
|
||||||
|
sval = `"NaN"`
|
||||||
|
}
|
||||||
|
if sval != "" {
|
||||||
|
out.write(sval)
|
||||||
|
return out.err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Default handling defers to the encoding/json library.
|
// Default handling defers to the encoding/json library.
|
||||||
b, err := json.Marshal(v.Interface())
|
b, err := json.Marshal(v.Interface())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -569,12 +643,13 @@ func (u *Unmarshaler) unmarshalValue(target reflect.Value, inputValue json.RawMe
|
|||||||
return u.unmarshalValue(target.Elem(), inputValue, prop)
|
return u.unmarshalValue(target.Elem(), inputValue, prop)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle well-known types.
|
if jsu, ok := target.Addr().Interface().(JSONPBUnmarshaler); ok {
|
||||||
type wkt interface {
|
return jsu.UnmarshalJSONPB(u, []byte(inputValue))
|
||||||
XXX_WellKnownType() string
|
|
||||||
}
|
}
|
||||||
if wkt, ok := target.Addr().Interface().(wkt); ok {
|
|
||||||
switch wkt.XXX_WellKnownType() {
|
// Handle well-known types.
|
||||||
|
if w, ok := target.Addr().Interface().(wkt); ok {
|
||||||
|
switch w.XXX_WellKnownType() {
|
||||||
case "DoubleValue", "FloatValue", "Int64Value", "UInt64Value",
|
case "DoubleValue", "FloatValue", "Int64Value", "UInt64Value",
|
||||||
"Int32Value", "UInt32Value", "BoolValue", "StringValue", "BytesValue":
|
"Int32Value", "UInt32Value", "BoolValue", "StringValue", "BytesValue":
|
||||||
// "Wrappers use the same representation in JSON
|
// "Wrappers use the same representation in JSON
|
||||||
@ -583,9 +658,72 @@ func (u *Unmarshaler) unmarshalValue(target reflect.Value, inputValue json.RawMe
|
|||||||
// so we don't have to do any extra work.
|
// so we don't have to do any extra work.
|
||||||
return u.unmarshalValue(target.Field(0), inputValue, prop)
|
return u.unmarshalValue(target.Field(0), inputValue, prop)
|
||||||
case "Any":
|
case "Any":
|
||||||
return fmt.Errorf("unmarshaling Any not supported yet")
|
// Use json.RawMessage pointer type instead of value to support pre-1.8 version.
|
||||||
|
// 1.8 changed RawMessage.MarshalJSON from pointer type to value type, see
|
||||||
|
// https://github.com/golang/go/issues/14493
|
||||||
|
var jsonFields map[string]*json.RawMessage
|
||||||
|
if err := json.Unmarshal(inputValue, &jsonFields); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
val, ok := jsonFields["@type"]
|
||||||
|
if !ok || val == nil {
|
||||||
|
return errors.New("Any JSON doesn't have '@type'")
|
||||||
|
}
|
||||||
|
|
||||||
|
var turl string
|
||||||
|
if err := json.Unmarshal([]byte(*val), &turl); err != nil {
|
||||||
|
return fmt.Errorf("can't unmarshal Any's '@type': %q", *val)
|
||||||
|
}
|
||||||
|
target.Field(0).SetString(turl)
|
||||||
|
|
||||||
|
mname := turl
|
||||||
|
if slash := strings.LastIndex(mname, "/"); slash >= 0 {
|
||||||
|
mname = mname[slash+1:]
|
||||||
|
}
|
||||||
|
mt := proto.MessageType(mname)
|
||||||
|
if mt == nil {
|
||||||
|
return fmt.Errorf("unknown message type %q", mname)
|
||||||
|
}
|
||||||
|
|
||||||
|
m := reflect.New(mt.Elem()).Interface().(proto.Message)
|
||||||
|
if _, ok := m.(wkt); ok {
|
||||||
|
val, ok := jsonFields["value"]
|
||||||
|
if !ok {
|
||||||
|
return errors.New("Any JSON doesn't have 'value'")
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := u.unmarshalValue(reflect.ValueOf(m).Elem(), *val, nil); err != nil {
|
||||||
|
return fmt.Errorf("can't unmarshal Any nested proto %T: %v", m, err)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
delete(jsonFields, "@type")
|
||||||
|
nestedProto, err := json.Marshal(jsonFields)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("can't generate JSON for Any's nested proto to be unmarshaled: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err = u.unmarshalValue(reflect.ValueOf(m).Elem(), nestedProto, nil); err != nil {
|
||||||
|
return fmt.Errorf("can't unmarshal Any nested proto %T: %v", m, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
b, err := proto.Marshal(m)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("can't marshal proto %T into Any.Value: %v", m, err)
|
||||||
|
}
|
||||||
|
target.Field(1).SetBytes(b)
|
||||||
|
|
||||||
|
return nil
|
||||||
case "Duration":
|
case "Duration":
|
||||||
unq, err := strconv.Unquote(string(inputValue))
|
ivStr := string(inputValue)
|
||||||
|
if ivStr == "null" {
|
||||||
|
target.Field(0).SetInt(0)
|
||||||
|
target.Field(1).SetInt(0)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
unq, err := strconv.Unquote(ivStr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -600,7 +738,14 @@ func (u *Unmarshaler) unmarshalValue(target reflect.Value, inputValue json.RawMe
|
|||||||
target.Field(1).SetInt(ns)
|
target.Field(1).SetInt(ns)
|
||||||
return nil
|
return nil
|
||||||
case "Timestamp":
|
case "Timestamp":
|
||||||
unq, err := strconv.Unquote(string(inputValue))
|
ivStr := string(inputValue)
|
||||||
|
if ivStr == "null" {
|
||||||
|
target.Field(0).SetInt(0)
|
||||||
|
target.Field(1).SetInt(0)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
unq, err := strconv.Unquote(ivStr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -611,6 +756,62 @@ func (u *Unmarshaler) unmarshalValue(target reflect.Value, inputValue json.RawMe
|
|||||||
target.Field(0).SetInt(int64(t.Unix()))
|
target.Field(0).SetInt(int64(t.Unix()))
|
||||||
target.Field(1).SetInt(int64(t.Nanosecond()))
|
target.Field(1).SetInt(int64(t.Nanosecond()))
|
||||||
return nil
|
return nil
|
||||||
|
case "Struct":
|
||||||
|
if string(inputValue) == "null" {
|
||||||
|
// Interpret a null struct as empty.
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
var m map[string]json.RawMessage
|
||||||
|
if err := json.Unmarshal(inputValue, &m); err != nil {
|
||||||
|
return fmt.Errorf("bad StructValue: %v", err)
|
||||||
|
}
|
||||||
|
target.Field(0).Set(reflect.ValueOf(map[string]*stpb.Value{}))
|
||||||
|
for k, jv := range m {
|
||||||
|
pv := &stpb.Value{}
|
||||||
|
if err := u.unmarshalValue(reflect.ValueOf(pv).Elem(), jv, prop); err != nil {
|
||||||
|
return fmt.Errorf("bad value in StructValue for key %q: %v", k, err)
|
||||||
|
}
|
||||||
|
target.Field(0).SetMapIndex(reflect.ValueOf(k), reflect.ValueOf(pv))
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
case "ListValue":
|
||||||
|
if string(inputValue) == "null" {
|
||||||
|
// Interpret a null ListValue as empty.
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
var s []json.RawMessage
|
||||||
|
if err := json.Unmarshal(inputValue, &s); err != nil {
|
||||||
|
return fmt.Errorf("bad ListValue: %v", err)
|
||||||
|
}
|
||||||
|
target.Field(0).Set(reflect.ValueOf(make([]*stpb.Value, len(s), len(s))))
|
||||||
|
for i, sv := range s {
|
||||||
|
if err := u.unmarshalValue(target.Field(0).Index(i), sv, prop); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
case "Value":
|
||||||
|
ivStr := string(inputValue)
|
||||||
|
if ivStr == "null" {
|
||||||
|
target.Field(0).Set(reflect.ValueOf(&stpb.Value_NullValue{}))
|
||||||
|
} else if v, err := strconv.ParseFloat(ivStr, 0); err == nil {
|
||||||
|
target.Field(0).Set(reflect.ValueOf(&stpb.Value_NumberValue{v}))
|
||||||
|
} else if v, err := strconv.Unquote(ivStr); err == nil {
|
||||||
|
target.Field(0).Set(reflect.ValueOf(&stpb.Value_StringValue{v}))
|
||||||
|
} else if v, err := strconv.ParseBool(ivStr); err == nil {
|
||||||
|
target.Field(0).Set(reflect.ValueOf(&stpb.Value_BoolValue{v}))
|
||||||
|
} else if err := json.Unmarshal(inputValue, &[]json.RawMessage{}); err == nil {
|
||||||
|
lv := &stpb.ListValue{}
|
||||||
|
target.Field(0).Set(reflect.ValueOf(&stpb.Value_ListValue{lv}))
|
||||||
|
return u.unmarshalValue(reflect.ValueOf(lv).Elem(), inputValue, prop)
|
||||||
|
} else if err := json.Unmarshal(inputValue, &map[string]json.RawMessage{}); err == nil {
|
||||||
|
sv := &stpb.Struct{}
|
||||||
|
target.Field(0).Set(reflect.ValueOf(&stpb.Value_StructValue{sv}))
|
||||||
|
return u.unmarshalValue(reflect.ValueOf(sv).Elem(), inputValue, prop)
|
||||||
|
} else {
|
||||||
|
return fmt.Errorf("unrecognized type for Value %q", ivStr)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -694,6 +895,26 @@ func (u *Unmarshaler) unmarshalValue(target reflect.Value, inputValue json.RawMe
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Handle proto2 extensions.
|
||||||
|
if len(jsonFields) > 0 {
|
||||||
|
if ep, ok := target.Addr().Interface().(proto.Message); ok {
|
||||||
|
for _, ext := range proto.RegisteredExtensions(ep) {
|
||||||
|
name := fmt.Sprintf("[%s]", ext.Name)
|
||||||
|
raw, ok := jsonFields[name]
|
||||||
|
if !ok {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
delete(jsonFields, name)
|
||||||
|
nv := reflect.New(reflect.TypeOf(ext.ExtensionType).Elem())
|
||||||
|
if err := u.unmarshalValue(nv.Elem(), raw, nil); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := proto.SetExtension(ep, ext, nv.Interface()); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if !u.AllowUnknownFields && len(jsonFields) > 0 {
|
if !u.AllowUnknownFields && len(jsonFields) > 0 {
|
||||||
// Pick any field to be the scapegoat.
|
// Pick any field to be the scapegoat.
|
||||||
var f string
|
var f string
|
||||||
@ -766,6 +987,15 @@ func (u *Unmarshaler) unmarshalValue(target reflect.Value, inputValue json.RawMe
|
|||||||
inputValue = inputValue[1 : len(inputValue)-1]
|
inputValue = inputValue[1 : len(inputValue)-1]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Non-finite numbers can be encoded as strings.
|
||||||
|
isFloat := targetType.Kind() == reflect.Float32 || targetType.Kind() == reflect.Float64
|
||||||
|
if isFloat {
|
||||||
|
if num, ok := nonFinite[string(inputValue)]; ok {
|
||||||
|
target.SetFloat(num)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Use the encoding/json for parsing other value types.
|
// Use the encoding/json for parsing other value types.
|
||||||
return json.Unmarshal(inputValue, target.Addr().Interface())
|
return json.Unmarshal(inputValue, target.Addr().Interface())
|
||||||
}
|
}
|
||||||
|
11
cmd/vendor/github.com/golang/protobuf/proto/encode.go
generated
vendored
11
cmd/vendor/github.com/golang/protobuf/proto/encode.go
generated
vendored
@ -1075,10 +1075,17 @@ func (o *Buffer) enc_map(p *Properties, base structPointer) error {
|
|||||||
|
|
||||||
func (o *Buffer) enc_exts(p *Properties, base structPointer) error {
|
func (o *Buffer) enc_exts(p *Properties, base structPointer) error {
|
||||||
exts := structPointer_Extensions(base, p.field)
|
exts := structPointer_Extensions(base, p.field)
|
||||||
if err := encodeExtensions(exts); err != nil {
|
|
||||||
|
v, mu := exts.extensionsRead()
|
||||||
|
if v == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
mu.Lock()
|
||||||
|
defer mu.Unlock()
|
||||||
|
if err := encodeExtensionsMap(v); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
v, _ := exts.extensionsRead()
|
|
||||||
|
|
||||||
return o.enc_map_body(v)
|
return o.enc_map_body(v)
|
||||||
}
|
}
|
||||||
|
1
cmd/vendor/github.com/golang/protobuf/proto/extensions.go
generated
vendored
1
cmd/vendor/github.com/golang/protobuf/proto/extensions.go
generated
vendored
@ -154,6 +154,7 @@ type ExtensionDesc struct {
|
|||||||
Field int32 // field number
|
Field int32 // field number
|
||||||
Name string // fully-qualified name of extension, for text formatting
|
Name string // fully-qualified name of extension, for text formatting
|
||||||
Tag string // protobuf tag style
|
Tag string // protobuf tag style
|
||||||
|
Filename string // name of the file in which the extension is defined
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ed *ExtensionDesc) repeated() bool {
|
func (ed *ExtensionDesc) repeated() bool {
|
||||||
|
1
cmd/vendor/github.com/golang/protobuf/proto/lib.go
generated
vendored
1
cmd/vendor/github.com/golang/protobuf/proto/lib.go
generated
vendored
@ -73,7 +73,6 @@ for a protocol buffer variable v:
|
|||||||
When the .proto file specifies `syntax="proto3"`, there are some differences:
|
When the .proto file specifies `syntax="proto3"`, there are some differences:
|
||||||
|
|
||||||
- Non-repeated fields of non-message type are values instead of pointers.
|
- Non-repeated fields of non-message type are values instead of pointers.
|
||||||
- Getters are only generated for message and oneof fields.
|
|
||||||
- Enum types do not get an Enum method.
|
- Enum types do not get an Enum method.
|
||||||
|
|
||||||
The simplest way to describe this is to see an example.
|
The simplest way to describe this is to see an example.
|
||||||
|
382
cmd/vendor/github.com/golang/protobuf/ptypes/struct/struct.pb.go
generated
vendored
Normal file
382
cmd/vendor/github.com/golang/protobuf/ptypes/struct/struct.pb.go
generated
vendored
Normal file
@ -0,0 +1,382 @@
|
|||||||
|
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||||
|
// source: github.com/golang/protobuf/ptypes/struct/struct.proto
|
||||||
|
|
||||||
|
/*
|
||||||
|
Package structpb is a generated protocol buffer package.
|
||||||
|
|
||||||
|
It is generated from these files:
|
||||||
|
github.com/golang/protobuf/ptypes/struct/struct.proto
|
||||||
|
|
||||||
|
It has these top-level messages:
|
||||||
|
Struct
|
||||||
|
Value
|
||||||
|
ListValue
|
||||||
|
*/
|
||||||
|
package structpb
|
||||||
|
|
||||||
|
import proto "github.com/golang/protobuf/proto"
|
||||||
|
import fmt "fmt"
|
||||||
|
import math "math"
|
||||||
|
|
||||||
|
// Reference imports to suppress errors if they are not otherwise used.
|
||||||
|
var _ = proto.Marshal
|
||||||
|
var _ = fmt.Errorf
|
||||||
|
var _ = math.Inf
|
||||||
|
|
||||||
|
// This is a compile-time assertion to ensure that this generated file
|
||||||
|
// is compatible with the proto package it is being compiled against.
|
||||||
|
// A compilation error at this line likely means your copy of the
|
||||||
|
// proto package needs to be updated.
|
||||||
|
const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
|
||||||
|
|
||||||
|
// `NullValue` is a singleton enumeration to represent the null value for the
|
||||||
|
// `Value` type union.
|
||||||
|
//
|
||||||
|
// The JSON representation for `NullValue` is JSON `null`.
|
||||||
|
type NullValue int32
|
||||||
|
|
||||||
|
const (
|
||||||
|
// Null value.
|
||||||
|
NullValue_NULL_VALUE NullValue = 0
|
||||||
|
)
|
||||||
|
|
||||||
|
var NullValue_name = map[int32]string{
|
||||||
|
0: "NULL_VALUE",
|
||||||
|
}
|
||||||
|
var NullValue_value = map[string]int32{
|
||||||
|
"NULL_VALUE": 0,
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x NullValue) String() string {
|
||||||
|
return proto.EnumName(NullValue_name, int32(x))
|
||||||
|
}
|
||||||
|
func (NullValue) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
|
||||||
|
func (NullValue) XXX_WellKnownType() string { return "NullValue" }
|
||||||
|
|
||||||
|
// `Struct` represents a structured data value, consisting of fields
|
||||||
|
// which map to dynamically typed values. In some languages, `Struct`
|
||||||
|
// might be supported by a native representation. For example, in
|
||||||
|
// scripting languages like JS a struct is represented as an
|
||||||
|
// object. The details of that representation are described together
|
||||||
|
// with the proto support for the language.
|
||||||
|
//
|
||||||
|
// The JSON representation for `Struct` is JSON object.
|
||||||
|
type Struct struct {
|
||||||
|
// Unordered map of dynamically typed values.
|
||||||
|
Fields map[string]*Value `protobuf:"bytes,1,rep,name=fields" json:"fields,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *Struct) Reset() { *m = Struct{} }
|
||||||
|
func (m *Struct) String() string { return proto.CompactTextString(m) }
|
||||||
|
func (*Struct) ProtoMessage() {}
|
||||||
|
func (*Struct) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
|
||||||
|
func (*Struct) XXX_WellKnownType() string { return "Struct" }
|
||||||
|
|
||||||
|
func (m *Struct) GetFields() map[string]*Value {
|
||||||
|
if m != nil {
|
||||||
|
return m.Fields
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// `Value` represents a dynamically typed value which can be either
|
||||||
|
// null, a number, a string, a boolean, a recursive struct value, or a
|
||||||
|
// list of values. A producer of value is expected to set one of that
|
||||||
|
// variants, absence of any variant indicates an error.
|
||||||
|
//
|
||||||
|
// The JSON representation for `Value` is JSON value.
|
||||||
|
type Value struct {
|
||||||
|
// The kind of value.
|
||||||
|
//
|
||||||
|
// Types that are valid to be assigned to Kind:
|
||||||
|
// *Value_NullValue
|
||||||
|
// *Value_NumberValue
|
||||||
|
// *Value_StringValue
|
||||||
|
// *Value_BoolValue
|
||||||
|
// *Value_StructValue
|
||||||
|
// *Value_ListValue
|
||||||
|
Kind isValue_Kind `protobuf_oneof:"kind"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *Value) Reset() { *m = Value{} }
|
||||||
|
func (m *Value) String() string { return proto.CompactTextString(m) }
|
||||||
|
func (*Value) ProtoMessage() {}
|
||||||
|
func (*Value) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
|
||||||
|
func (*Value) XXX_WellKnownType() string { return "Value" }
|
||||||
|
|
||||||
|
type isValue_Kind interface {
|
||||||
|
isValue_Kind()
|
||||||
|
}
|
||||||
|
|
||||||
|
type Value_NullValue struct {
|
||||||
|
NullValue NullValue `protobuf:"varint,1,opt,name=null_value,json=nullValue,enum=google.protobuf.NullValue,oneof"`
|
||||||
|
}
|
||||||
|
type Value_NumberValue struct {
|
||||||
|
NumberValue float64 `protobuf:"fixed64,2,opt,name=number_value,json=numberValue,oneof"`
|
||||||
|
}
|
||||||
|
type Value_StringValue struct {
|
||||||
|
StringValue string `protobuf:"bytes,3,opt,name=string_value,json=stringValue,oneof"`
|
||||||
|
}
|
||||||
|
type Value_BoolValue struct {
|
||||||
|
BoolValue bool `protobuf:"varint,4,opt,name=bool_value,json=boolValue,oneof"`
|
||||||
|
}
|
||||||
|
type Value_StructValue struct {
|
||||||
|
StructValue *Struct `protobuf:"bytes,5,opt,name=struct_value,json=structValue,oneof"`
|
||||||
|
}
|
||||||
|
type Value_ListValue struct {
|
||||||
|
ListValue *ListValue `protobuf:"bytes,6,opt,name=list_value,json=listValue,oneof"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*Value_NullValue) isValue_Kind() {}
|
||||||
|
func (*Value_NumberValue) isValue_Kind() {}
|
||||||
|
func (*Value_StringValue) isValue_Kind() {}
|
||||||
|
func (*Value_BoolValue) isValue_Kind() {}
|
||||||
|
func (*Value_StructValue) isValue_Kind() {}
|
||||||
|
func (*Value_ListValue) isValue_Kind() {}
|
||||||
|
|
||||||
|
func (m *Value) GetKind() isValue_Kind {
|
||||||
|
if m != nil {
|
||||||
|
return m.Kind
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *Value) GetNullValue() NullValue {
|
||||||
|
if x, ok := m.GetKind().(*Value_NullValue); ok {
|
||||||
|
return x.NullValue
|
||||||
|
}
|
||||||
|
return NullValue_NULL_VALUE
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *Value) GetNumberValue() float64 {
|
||||||
|
if x, ok := m.GetKind().(*Value_NumberValue); ok {
|
||||||
|
return x.NumberValue
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *Value) GetStringValue() string {
|
||||||
|
if x, ok := m.GetKind().(*Value_StringValue); ok {
|
||||||
|
return x.StringValue
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *Value) GetBoolValue() bool {
|
||||||
|
if x, ok := m.GetKind().(*Value_BoolValue); ok {
|
||||||
|
return x.BoolValue
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *Value) GetStructValue() *Struct {
|
||||||
|
if x, ok := m.GetKind().(*Value_StructValue); ok {
|
||||||
|
return x.StructValue
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *Value) GetListValue() *ListValue {
|
||||||
|
if x, ok := m.GetKind().(*Value_ListValue); ok {
|
||||||
|
return x.ListValue
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// XXX_OneofFuncs is for the internal use of the proto package.
|
||||||
|
func (*Value) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
|
||||||
|
return _Value_OneofMarshaler, _Value_OneofUnmarshaler, _Value_OneofSizer, []interface{}{
|
||||||
|
(*Value_NullValue)(nil),
|
||||||
|
(*Value_NumberValue)(nil),
|
||||||
|
(*Value_StringValue)(nil),
|
||||||
|
(*Value_BoolValue)(nil),
|
||||||
|
(*Value_StructValue)(nil),
|
||||||
|
(*Value_ListValue)(nil),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func _Value_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
|
||||||
|
m := msg.(*Value)
|
||||||
|
// kind
|
||||||
|
switch x := m.Kind.(type) {
|
||||||
|
case *Value_NullValue:
|
||||||
|
b.EncodeVarint(1<<3 | proto.WireVarint)
|
||||||
|
b.EncodeVarint(uint64(x.NullValue))
|
||||||
|
case *Value_NumberValue:
|
||||||
|
b.EncodeVarint(2<<3 | proto.WireFixed64)
|
||||||
|
b.EncodeFixed64(math.Float64bits(x.NumberValue))
|
||||||
|
case *Value_StringValue:
|
||||||
|
b.EncodeVarint(3<<3 | proto.WireBytes)
|
||||||
|
b.EncodeStringBytes(x.StringValue)
|
||||||
|
case *Value_BoolValue:
|
||||||
|
t := uint64(0)
|
||||||
|
if x.BoolValue {
|
||||||
|
t = 1
|
||||||
|
}
|
||||||
|
b.EncodeVarint(4<<3 | proto.WireVarint)
|
||||||
|
b.EncodeVarint(t)
|
||||||
|
case *Value_StructValue:
|
||||||
|
b.EncodeVarint(5<<3 | proto.WireBytes)
|
||||||
|
if err := b.EncodeMessage(x.StructValue); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
case *Value_ListValue:
|
||||||
|
b.EncodeVarint(6<<3 | proto.WireBytes)
|
||||||
|
if err := b.EncodeMessage(x.ListValue); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
case nil:
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("Value.Kind has unexpected type %T", x)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func _Value_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
|
||||||
|
m := msg.(*Value)
|
||||||
|
switch tag {
|
||||||
|
case 1: // kind.null_value
|
||||||
|
if wire != proto.WireVarint {
|
||||||
|
return true, proto.ErrInternalBadWireType
|
||||||
|
}
|
||||||
|
x, err := b.DecodeVarint()
|
||||||
|
m.Kind = &Value_NullValue{NullValue(x)}
|
||||||
|
return true, err
|
||||||
|
case 2: // kind.number_value
|
||||||
|
if wire != proto.WireFixed64 {
|
||||||
|
return true, proto.ErrInternalBadWireType
|
||||||
|
}
|
||||||
|
x, err := b.DecodeFixed64()
|
||||||
|
m.Kind = &Value_NumberValue{math.Float64frombits(x)}
|
||||||
|
return true, err
|
||||||
|
case 3: // kind.string_value
|
||||||
|
if wire != proto.WireBytes {
|
||||||
|
return true, proto.ErrInternalBadWireType
|
||||||
|
}
|
||||||
|
x, err := b.DecodeStringBytes()
|
||||||
|
m.Kind = &Value_StringValue{x}
|
||||||
|
return true, err
|
||||||
|
case 4: // kind.bool_value
|
||||||
|
if wire != proto.WireVarint {
|
||||||
|
return true, proto.ErrInternalBadWireType
|
||||||
|
}
|
||||||
|
x, err := b.DecodeVarint()
|
||||||
|
m.Kind = &Value_BoolValue{x != 0}
|
||||||
|
return true, err
|
||||||
|
case 5: // kind.struct_value
|
||||||
|
if wire != proto.WireBytes {
|
||||||
|
return true, proto.ErrInternalBadWireType
|
||||||
|
}
|
||||||
|
msg := new(Struct)
|
||||||
|
err := b.DecodeMessage(msg)
|
||||||
|
m.Kind = &Value_StructValue{msg}
|
||||||
|
return true, err
|
||||||
|
case 6: // kind.list_value
|
||||||
|
if wire != proto.WireBytes {
|
||||||
|
return true, proto.ErrInternalBadWireType
|
||||||
|
}
|
||||||
|
msg := new(ListValue)
|
||||||
|
err := b.DecodeMessage(msg)
|
||||||
|
m.Kind = &Value_ListValue{msg}
|
||||||
|
return true, err
|
||||||
|
default:
|
||||||
|
return false, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func _Value_OneofSizer(msg proto.Message) (n int) {
|
||||||
|
m := msg.(*Value)
|
||||||
|
// kind
|
||||||
|
switch x := m.Kind.(type) {
|
||||||
|
case *Value_NullValue:
|
||||||
|
n += proto.SizeVarint(1<<3 | proto.WireVarint)
|
||||||
|
n += proto.SizeVarint(uint64(x.NullValue))
|
||||||
|
case *Value_NumberValue:
|
||||||
|
n += proto.SizeVarint(2<<3 | proto.WireFixed64)
|
||||||
|
n += 8
|
||||||
|
case *Value_StringValue:
|
||||||
|
n += proto.SizeVarint(3<<3 | proto.WireBytes)
|
||||||
|
n += proto.SizeVarint(uint64(len(x.StringValue)))
|
||||||
|
n += len(x.StringValue)
|
||||||
|
case *Value_BoolValue:
|
||||||
|
n += proto.SizeVarint(4<<3 | proto.WireVarint)
|
||||||
|
n += 1
|
||||||
|
case *Value_StructValue:
|
||||||
|
s := proto.Size(x.StructValue)
|
||||||
|
n += proto.SizeVarint(5<<3 | proto.WireBytes)
|
||||||
|
n += proto.SizeVarint(uint64(s))
|
||||||
|
n += s
|
||||||
|
case *Value_ListValue:
|
||||||
|
s := proto.Size(x.ListValue)
|
||||||
|
n += proto.SizeVarint(6<<3 | proto.WireBytes)
|
||||||
|
n += proto.SizeVarint(uint64(s))
|
||||||
|
n += s
|
||||||
|
case nil:
|
||||||
|
default:
|
||||||
|
panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
|
||||||
|
}
|
||||||
|
return n
|
||||||
|
}
|
||||||
|
|
||||||
|
// `ListValue` is a wrapper around a repeated field of values.
|
||||||
|
//
|
||||||
|
// The JSON representation for `ListValue` is JSON array.
|
||||||
|
type ListValue struct {
|
||||||
|
// Repeated field of dynamically typed values.
|
||||||
|
Values []*Value `protobuf:"bytes,1,rep,name=values" json:"values,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *ListValue) Reset() { *m = ListValue{} }
|
||||||
|
func (m *ListValue) String() string { return proto.CompactTextString(m) }
|
||||||
|
func (*ListValue) ProtoMessage() {}
|
||||||
|
func (*ListValue) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
|
||||||
|
func (*ListValue) XXX_WellKnownType() string { return "ListValue" }
|
||||||
|
|
||||||
|
func (m *ListValue) GetValues() []*Value {
|
||||||
|
if m != nil {
|
||||||
|
return m.Values
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
proto.RegisterType((*Struct)(nil), "google.protobuf.Struct")
|
||||||
|
proto.RegisterType((*Value)(nil), "google.protobuf.Value")
|
||||||
|
proto.RegisterType((*ListValue)(nil), "google.protobuf.ListValue")
|
||||||
|
proto.RegisterEnum("google.protobuf.NullValue", NullValue_name, NullValue_value)
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
proto.RegisterFile("github.com/golang/protobuf/ptypes/struct/struct.proto", fileDescriptor0)
|
||||||
|
}
|
||||||
|
|
||||||
|
var fileDescriptor0 = []byte{
|
||||||
|
// 417 bytes of a gzipped FileDescriptorProto
|
||||||
|
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0x41, 0x8b, 0xd3, 0x40,
|
||||||
|
0x14, 0x80, 0x3b, 0xc9, 0x36, 0x98, 0x17, 0x59, 0x97, 0x11, 0xb4, 0xac, 0xa0, 0xa1, 0x7b, 0x09,
|
||||||
|
0x22, 0x09, 0x56, 0x04, 0x31, 0x5e, 0x0c, 0xac, 0xbb, 0x60, 0x58, 0x62, 0x74, 0x57, 0xf0, 0x52,
|
||||||
|
0x9a, 0x34, 0x8d, 0xa1, 0xd3, 0x99, 0x90, 0xcc, 0x28, 0x3d, 0xfa, 0x2f, 0x3c, 0x7b, 0xf4, 0xe8,
|
||||||
|
0xaf, 0xf3, 0x28, 0x33, 0x93, 0x44, 0x69, 0x29, 0x78, 0x9a, 0xbe, 0x37, 0xdf, 0xfb, 0xe6, 0xbd,
|
||||||
|
0xd7, 0xc0, 0xf3, 0xb2, 0xe2, 0x9f, 0x45, 0xe6, 0xe7, 0x6c, 0x13, 0x94, 0x8c, 0x2c, 0x68, 0x19,
|
||||||
|
0xd4, 0x0d, 0xe3, 0x2c, 0x13, 0xab, 0xa0, 0xe6, 0xdb, 0xba, 0x68, 0x83, 0x96, 0x37, 0x22, 0xe7,
|
||||||
|
0xdd, 0xe1, 0xab, 0x5b, 0x7c, 0xa7, 0x64, 0xac, 0x24, 0x85, 0xdf, 0xb3, 0xd3, 0xef, 0x08, 0xac,
|
||||||
|
0xf7, 0x8a, 0xc0, 0x21, 0x58, 0xab, 0xaa, 0x20, 0xcb, 0x76, 0x82, 0x5c, 0xd3, 0x73, 0x66, 0x67,
|
||||||
|
0xfe, 0x0e, 0xec, 0x6b, 0xd0, 0x7f, 0xa3, 0xa8, 0x73, 0xca, 0x9b, 0x6d, 0xda, 0x95, 0x9c, 0xbe,
|
||||||
|
0x03, 0xe7, 0x9f, 0x34, 0x3e, 0x01, 0x73, 0x5d, 0x6c, 0x27, 0xc8, 0x45, 0x9e, 0x9d, 0xca, 0x9f,
|
||||||
|
0xf8, 0x09, 0x8c, 0xbf, 0x2c, 0x88, 0x28, 0x26, 0x86, 0x8b, 0x3c, 0x67, 0x76, 0x6f, 0x4f, 0x7e,
|
||||||
|
0x23, 0x6f, 0x53, 0x0d, 0xbd, 0x34, 0x5e, 0xa0, 0xe9, 0x2f, 0x03, 0xc6, 0x2a, 0x89, 0x43, 0x00,
|
||||||
|
0x2a, 0x08, 0x99, 0x6b, 0x81, 0x94, 0x1e, 0xcf, 0x4e, 0xf7, 0x04, 0x57, 0x82, 0x10, 0xc5, 0x5f,
|
||||||
|
0x8e, 0x52, 0x9b, 0xf6, 0x01, 0x3e, 0x83, 0xdb, 0x54, 0x6c, 0xb2, 0xa2, 0x99, 0xff, 0x7d, 0x1f,
|
||||||
|
0x5d, 0x8e, 0x52, 0x47, 0x67, 0x07, 0xa8, 0xe5, 0x4d, 0x45, 0xcb, 0x0e, 0x32, 0x65, 0xe3, 0x12,
|
||||||
|
0xd2, 0x59, 0x0d, 0x3d, 0x02, 0xc8, 0x18, 0xeb, 0xdb, 0x38, 0x72, 0x91, 0x77, 0x4b, 0x3e, 0x25,
|
||||||
|
0x73, 0x1a, 0x78, 0xa5, 0x2c, 0x22, 0xe7, 0x1d, 0x32, 0x56, 0xa3, 0xde, 0x3f, 0xb0, 0xc7, 0x4e,
|
||||||
|
0x2f, 0x72, 0x3e, 0x4c, 0x49, 0xaa, 0xb6, 0xaf, 0xb5, 0x54, 0xed, 0xfe, 0x94, 0x71, 0xd5, 0xf2,
|
||||||
|
0x61, 0x4a, 0xd2, 0x07, 0x91, 0x05, 0x47, 0xeb, 0x8a, 0x2e, 0xa7, 0x21, 0xd8, 0x03, 0x81, 0x7d,
|
||||||
|
0xb0, 0x94, 0xac, 0xff, 0x47, 0x0f, 0x2d, 0xbd, 0xa3, 0x1e, 0x3f, 0x00, 0x7b, 0x58, 0x22, 0x3e,
|
||||||
|
0x06, 0xb8, 0xba, 0x8e, 0xe3, 0xf9, 0xcd, 0xeb, 0xf8, 0xfa, 0xfc, 0x64, 0x14, 0x7d, 0x43, 0x70,
|
||||||
|
0x37, 0x67, 0x9b, 0x5d, 0x45, 0xe4, 0xe8, 0x69, 0x12, 0x19, 0x27, 0xe8, 0xd3, 0xd3, 0xff, 0xfd,
|
||||||
|
0x30, 0x43, 0x7d, 0xd4, 0xd9, 0x6f, 0x84, 0x7e, 0x18, 0xe6, 0x45, 0x12, 0xfd, 0x34, 0x1e, 0x5e,
|
||||||
|
0x68, 0x79, 0xd2, 0xf7, 0xf7, 0xb1, 0x20, 0xe4, 0x2d, 0x65, 0x5f, 0xe9, 0x07, 0x59, 0x99, 0x59,
|
||||||
|
0x4a, 0xf5, 0xec, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x9b, 0x6e, 0x5d, 0x3c, 0xfe, 0x02, 0x00,
|
||||||
|
0x00,
|
||||||
|
}
|
4
cmd/vendor/github.com/russross/blackfriday/inline.go
generated
vendored
4
cmd/vendor/github.com/russross/blackfriday/inline.go
generated
vendored
@ -488,6 +488,7 @@ func link(p *parser, out *bytes.Buffer, data []byte, offset int) int {
|
|||||||
}
|
}
|
||||||
|
|
||||||
p.notes = append(p.notes, ref)
|
p.notes = append(p.notes, ref)
|
||||||
|
p.notesRecord[string(ref.link)] = struct{}{}
|
||||||
|
|
||||||
link = ref.link
|
link = ref.link
|
||||||
title = ref.title
|
title = ref.title
|
||||||
@ -498,9 +499,10 @@ func link(p *parser, out *bytes.Buffer, data []byte, offset int) int {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
if t == linkDeferredFootnote {
|
if t == linkDeferredFootnote && !p.isFootnote(lr) {
|
||||||
lr.noteId = len(p.notes) + 1
|
lr.noteId = len(p.notes) + 1
|
||||||
p.notes = append(p.notes, lr)
|
p.notes = append(p.notes, lr)
|
||||||
|
p.notesRecord[string(lr.link)] = struct{}{}
|
||||||
}
|
}
|
||||||
|
|
||||||
// keep link and title from reference
|
// keep link and title from reference
|
||||||
|
7
cmd/vendor/github.com/russross/blackfriday/markdown.go
generated
vendored
7
cmd/vendor/github.com/russross/blackfriday/markdown.go
generated
vendored
@ -219,6 +219,7 @@ type parser struct {
|
|||||||
// presence. If a ref is also a footnote, it's stored both in refs and here
|
// presence. If a ref is also a footnote, it's stored both in refs and here
|
||||||
// in notes. Slice is nil if footnotes not enabled.
|
// in notes. Slice is nil if footnotes not enabled.
|
||||||
notes []*reference
|
notes []*reference
|
||||||
|
notesRecord map[string]struct{}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *parser) getRef(refid string) (ref *reference, found bool) {
|
func (p *parser) getRef(refid string) (ref *reference, found bool) {
|
||||||
@ -241,6 +242,11 @@ func (p *parser) getRef(refid string) (ref *reference, found bool) {
|
|||||||
return ref, found
|
return ref, found
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *parser) isFootnote(ref *reference) bool {
|
||||||
|
_, ok := p.notesRecord[string(ref.link)]
|
||||||
|
return ok
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
// Public interface
|
// Public interface
|
||||||
@ -376,6 +382,7 @@ func MarkdownOptions(input []byte, renderer Renderer, opts Options) []byte {
|
|||||||
|
|
||||||
if extensions&EXTENSION_FOOTNOTES != 0 {
|
if extensions&EXTENSION_FOOTNOTES != 0 {
|
||||||
p.notes = make([]*reference, 0)
|
p.notes = make([]*reference, 0)
|
||||||
|
p.notesRecord = make(map[string]struct{})
|
||||||
}
|
}
|
||||||
|
|
||||||
first := firstPass(p, input)
|
first := firstPass(p, input)
|
||||||
|
15
glide.lock
generated
15
glide.lock
generated
@ -1,5 +1,5 @@
|
|||||||
hash: cee1f2629857e9c2384ad89ff6014db09498c9af53771e5144ad3a4b510ff00e
|
hash: 936853fc7427741a35ce6114725318c5642f604214520d0e7d119c8f3ee9ab0a
|
||||||
updated: 2017-05-30T10:29:08.22609283-07:00
|
updated: 2017-06-12T14:15:04.520854967-07:00
|
||||||
imports:
|
imports:
|
||||||
- name: github.com/beorn7/perks
|
- name: github.com/beorn7/perks
|
||||||
version: 4c0e84591b9aa9e6dcfdf3e020114cd81f89d5f9
|
version: 4c0e84591b9aa9e6dcfdf3e020114cd81f89d5f9
|
||||||
@ -27,7 +27,7 @@ imports:
|
|||||||
- capnslog
|
- capnslog
|
||||||
- dlopen
|
- dlopen
|
||||||
- name: github.com/cpuguy83/go-md2man
|
- name: github.com/cpuguy83/go-md2man
|
||||||
version: bcc0a711c5e6bbe72c7cb13d81c7109b45267fd2
|
version: 23709d0847197db6021a51fdb193e66e9222d4e7
|
||||||
subpackages:
|
subpackages:
|
||||||
- md2man
|
- md2man
|
||||||
- name: github.com/dgrijalva/jwt-go
|
- name: github.com/dgrijalva/jwt-go
|
||||||
@ -37,7 +37,7 @@ imports:
|
|||||||
- name: github.com/ghodss/yaml
|
- name: github.com/ghodss/yaml
|
||||||
version: 0ca9ea5df5451ffdf184b4428c902747c2c11cd7
|
version: 0ca9ea5df5451ffdf184b4428c902747c2c11cd7
|
||||||
- name: github.com/gogo/protobuf
|
- name: github.com/gogo/protobuf
|
||||||
version: 909568be09de550ed094403c2bf8a261b5bb730a
|
version: 100ba4e885062801d56799d78530b73b178a78f3
|
||||||
subpackages:
|
subpackages:
|
||||||
- proto
|
- proto
|
||||||
- name: github.com/golang/groupcache
|
- name: github.com/golang/groupcache
|
||||||
@ -45,10 +45,11 @@ imports:
|
|||||||
subpackages:
|
subpackages:
|
||||||
- lru
|
- lru
|
||||||
- name: github.com/golang/protobuf
|
- name: github.com/golang/protobuf
|
||||||
version: 4bd1920723d7b7c925de087aa32e2187708897f7
|
version: 5a0f697c9ed9d68fef0116532c6e05cfeae00e55
|
||||||
subpackages:
|
subpackages:
|
||||||
- jsonpb
|
- jsonpb
|
||||||
- proto
|
- proto
|
||||||
|
- ptypes/struct
|
||||||
- name: github.com/google/btree
|
- name: github.com/google/btree
|
||||||
version: 925471ac9e2131377a91e1595defec898166fe49
|
version: 925471ac9e2131377a91e1595defec898166fe49
|
||||||
- name: github.com/grpc-ecosystem/go-grpc-prometheus
|
- name: github.com/grpc-ecosystem/go-grpc-prometheus
|
||||||
@ -94,7 +95,7 @@ imports:
|
|||||||
subpackages:
|
subpackages:
|
||||||
- xfs
|
- xfs
|
||||||
- name: github.com/russross/blackfriday
|
- name: github.com/russross/blackfriday
|
||||||
version: 0ba0f2b6ed7c475a92e4df8641825cb7a11d1fa3
|
version: 067529f716f4c3f5e37c8c95ddd59df1007290ae
|
||||||
- name: github.com/spf13/cobra
|
- name: github.com/spf13/cobra
|
||||||
version: 1c44ec8d3f1552cac48999f9306da23c4d8a288b
|
version: 1c44ec8d3f1552cac48999f9306da23c4d8a288b
|
||||||
- name: github.com/spf13/pflag
|
- name: github.com/spf13/pflag
|
||||||
@ -127,7 +128,7 @@ imports:
|
|||||||
subpackages:
|
subpackages:
|
||||||
- unix
|
- unix
|
||||||
- name: golang.org/x/text
|
- name: golang.org/x/text
|
||||||
version: 4ee4af566555f5fbe026368b75596286a312663a
|
version: 210eee5cf7323015d097341bcf7166130d001cd8
|
||||||
subpackages:
|
subpackages:
|
||||||
- secure/bidirule
|
- secure/bidirule
|
||||||
- transform
|
- transform
|
||||||
|
@ -25,7 +25,7 @@ import:
|
|||||||
- package: github.com/ghodss/yaml
|
- package: github.com/ghodss/yaml
|
||||||
version: v1.0.0
|
version: v1.0.0
|
||||||
- package: github.com/gogo/protobuf
|
- package: github.com/gogo/protobuf
|
||||||
version: v0.3
|
version: v0.4
|
||||||
subpackages:
|
subpackages:
|
||||||
- proto
|
- proto
|
||||||
- package: github.com/golang/groupcache
|
- package: github.com/golang/groupcache
|
||||||
@ -33,7 +33,7 @@ import:
|
|||||||
subpackages:
|
subpackages:
|
||||||
- lru
|
- lru
|
||||||
- package: github.com/golang/protobuf
|
- package: github.com/golang/protobuf
|
||||||
version: 4bd1920723d7b7c925de087aa32e2187708897f7
|
version: 5a0f697c9ed9d68fef0116532c6e05cfeae00e55
|
||||||
subpackages:
|
subpackages:
|
||||||
- jsonpb
|
- jsonpb
|
||||||
- proto
|
- proto
|
||||||
|
Loading…
x
Reference in New Issue
Block a user