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 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326
|
package _generated
import (
"encoding/json"
"os"
"time"
"github.com/tinylib/msgp/msgp"
)
//go:generate msgp -v -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
WeirdTag string `msg:"\x0b"`
}
// 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
MapStringEmpty map[string]struct{}
MapStringEmpty2 map[string]EmptyStruct
}
//msgp:tuple Object
type Object struct {
ObjectNo string `msg:"objno"`
Slice1 []string `msg:"slice1"`
Slice2 []string `msg:"slice2"`
MapMap map[string]map[string]string
MapStringEmpty map[string]struct{}
MapStringEmpty2 map[string]EmptyStruct
}
//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
AliasContainer struct {
Fast FastAlias
}
)
// Test dependency resolution
type (
IntA int
IntB IntA
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
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
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 [0o7]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:"-"`
C map[string]struct{} `msg:"cccc"`
}
}
}
type EmptyStruct struct{}
type StructByteSlice struct {
ABytes []byte `msg:",allownil"`
AString []string `msg:",allownil"`
ABool []bool `msg:",allownil"`
AInt []int `msg:",allownil"`
AInt8 []int8 `msg:",allownil"`
AInt16 []int16 `msg:",allownil"`
AInt32 []int32 `msg:",allownil"`
AInt64 []int64 `msg:",allownil"`
AUint []uint `msg:",allownil"`
AUint8 []uint8 `msg:",allownil"`
AUint16 []uint16 `msg:",allownil"`
AUint32 []uint32 `msg:",allownil"`
AUint64 []uint64 `msg:",allownil"`
AFloat32 []float32 `msg:",allownil"`
AFloat64 []float64 `msg:",allownil"`
AComplex64 []complex64 `msg:",allownil"`
AComplex128 []complex128 `msg:",allownil"`
AStruct []Fixed `msg:",allownil"`
}
type NumberJSONSample struct {
Single json.Number
Array []json.Number
Map map[string]json.Number
OE json.Number `msg:",omitempty"`
}
type Flobbity struct {
A Flobs `msg:"a,omitempty"`
B Flobs `msg:"b,omitempty"`
}
type Flobs []Flob
type Flob struct {
X Numberwang `msg:"x"`
Y int8 `msg:"y"`
Z int8 `msg:"z"`
W int32 `msg:"w"`
}
type Numberwang int8
|