1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182
|
package _generated
import (
"github.com/tinylib/msgp/msgp"
"os"
"time"
)
//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
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"`
}
//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
}
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 {
Relevent Files `msg:"files"`
Name string `msg:"name"`
}
type CustomInt int
type CustomBytes []byte
|