|
|
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:"-"` } } }
|