You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

265 lines
5.6 KiB

package _generated
import (
"os"
"time"
"github.com/tinylib/msgp/msgp"
)
//go:generate msgp -o generated.go
// All of the struct
// definitions in this
// file are fed to the code
// generator when `make test` is
// called, followed by an
// invocation of `go test -v` in this
// directory. A simple way of testing
// a struct definition is
// by adding it to this file.
type Block [32]byte
// tests edge-cases with
// compiling size compilation.
type X struct {
Values [32]byte // should compile to 32*msgp.ByteSize; encoded as Bin
ValuesPtr *[32]byte // check (*)[:] deref
More Block // should be identical to the above
Others [][32]int32 // should compile to len(x.Others)*32*msgp.Int32Size
Matrix [][]int32 // should not optimize
ManyFixed []Fixed
}
// test fixed-size struct
// size compilation
type Fixed struct {
A float64
B bool
}
type TestType struct {
F *float64 `msg:"float"`
Els map[string]string `msg:"elements"`
Obj struct { // test anonymous struct
ValueA string `msg:"value_a"`
ValueB []byte `msg:"value_b"`
} `msg:"object"`
Child *TestType `msg:"child"`
Time time.Time `msg:"time"`
Any interface{} `msg:"any"`
Appended msgp.Raw `msg:"appended"`
Num msgp.Number `msg:"num"`
Byte byte
Rune rune
RunePtr *rune
RunePtrPtr **rune
RuneSlice []rune
Slice1 []string
Slice2 []string
SlicePtr *[]string
}
//msgp:tuple Object
type Object struct {
ObjectNo string `msg:"objno"`
Slice1 []string `msg:"slice1"`
Slice2 []string `msg:"slice2"`
MapMap map[string]map[string]string
}
//msgp:tuple TestBench
type TestBench struct {
Name string
BirthDay time.Time
Phone string
Siblings int
Spouse bool
Money float64
}
//msgp:tuple TestFast
type TestFast struct {
Lat, Long, Alt float64 // test inline decl
Data []byte
}
// Test nested aliases
type FastAlias TestFast
type AliasContainer struct {
Fast FastAlias
}
// Test dependency resolution
type IntA int
type IntB IntA
type IntC IntB
type TestHidden struct {
A string
B []float64
Bad func(string) bool // This results in a warning: field "Bad" unsupported
}
type Embedded struct {
*Embedded // test embedded field
Children []Embedded
PtrChildren []*Embedded
Other string
}
const eight = 8
type Things struct {
Cmplx complex64 `msg:"complex"` // test slices
Vals []int32 `msg:"values"`
Arr [msgp.ExtensionPrefixSize]float64 `msg:"arr"` // test const array and *ast.SelectorExpr as array size
Arr2 [4]float64 `msg:"arr2"` // test basic lit array
Ext *msgp.RawExtension `msg:"ext,extension"` // test extension
Oext msgp.RawExtension `msg:"oext,extension"` // test extension reference
}
//msgp:shim SpecialID as:[]byte using:toBytes/fromBytes
type SpecialID string
type TestObj struct{ ID1, ID2 SpecialID }
func toBytes(id SpecialID) []byte { return []byte(string(id)) }
func fromBytes(id []byte) SpecialID { return SpecialID(string(id)) }
type MyEnum byte
const (
A MyEnum = iota
B
C
D
invalid
)
// test shim directive (below)
//msgp:shim MyEnum as:string using:(MyEnum).String/myenumStr
//msgp:shim *os.File as:string using:filetostr/filefromstr
func filetostr(f *os.File) string {
return f.Name()
}
func filefromstr(s string) *os.File {
f, _ := os.Open(s)
return f
}
func (m MyEnum) String() string {
switch m {
case A:
return "A"
case B:
return "B"
case C:
return "C"
case D:
return "D"
default:
return "<invalid>"
}
}
func myenumStr(s string) MyEnum {
switch s {
case "A":
return A
case "B":
return B
case "C":
return C
case "D":
return D
default:
return invalid
}
}
// test pass-specific directive
//msgp:decode ignore Insane
type Insane [3]map[string]struct{ A, B CustomInt }
type Custom struct {
Bts CustomBytes `msg:"bts"`
Mp map[string]*Embedded `msg:"mp"`
Enums []MyEnum `msg:"enums"` // test explicit enum shim
Some FileHandle `msg:file_handle`
}
type Files []*os.File
type FileHandle struct {
Relevant Files `msg:"files"`
Name string `msg:"name"`
}
type CustomInt int
type CustomBytes []byte
type Wrapper struct {
Tree *Tree
}
type Tree struct {
Children []Tree
Element int
Parent *Wrapper
}
// Ensure all different widths of integer can be used as constant keys.
const (
ConstantInt int = 8
ConstantInt8 int8 = 8
ConstantInt16 int16 = 8
ConstantInt32 int32 = 8
ConstantInt64 int64 = 8
ConstantUint uint = 8
ConstantUint8 uint8 = 8
ConstantUint16 uint16 = 8
ConstantUint32 uint32 = 8
ConstantUint64 uint64 = 8
)
type ArrayConstants struct {
ConstantInt [ConstantInt]string
ConstantInt8 [ConstantInt8]string
ConstantInt16 [ConstantInt16]string
ConstantInt32 [ConstantInt32]string
ConstantInt64 [ConstantInt64]string
ConstantUint [ConstantUint]string
ConstantUint8 [ConstantUint8]string
ConstantUint16 [ConstantUint16]string
ConstantUint32 [ConstantUint32]string
ConstantUint64 [ConstantUint64]string
ConstantHex [0x16]string
ConstantOctal [07]string
}
// Ensure non-msg struct tags work:
// https://github.com/tinylib/msgp/issues/201
type NonMsgStructTags struct {
A []string `json:"fooJSON" msg:"fooMsgp"`
B string `json:"barJSON"`
C []string `json:"bazJSON" msg:"-"`
Nested []struct {
A []string `json:"a"`
B string `json:"b"`
C []string `json:"c"`
VeryNested []struct {
A []string `json:"a"`
B []string `msg:"bbbb" xml:"-"`
}
}
}