github.com/protolambda/zssz@v0.1.5/types/ssz_uint16.go (about) 1 package types 2 3 import ( 4 "encoding/binary" 5 "fmt" 6 . "github.com/protolambda/zssz/dec" 7 . "github.com/protolambda/zssz/enc" 8 . "github.com/protolambda/zssz/htr" 9 . "github.com/protolambda/zssz/pretty" 10 "unsafe" 11 ) 12 13 type SSZUint16 struct{} 14 15 func (t SSZUint16) FuzzMinLen() uint64 { 16 return 2 17 } 18 19 func (t SSZUint16) FuzzMaxLen() uint64 { 20 return 2 21 } 22 23 func (t SSZUint16) MinLen() uint64 { 24 return 2 25 } 26 27 func (t SSZUint16) MaxLen() uint64 { 28 return 2 29 } 30 31 func (t SSZUint16) FixedLen() uint64 { 32 return 2 33 } 34 35 func (t SSZUint16) IsFixed() bool { 36 return true 37 } 38 39 func (t SSZUint16) SizeOf(p unsafe.Pointer) uint64 { 40 return 2 41 } 42 43 func (t SSZUint16) Encode(eb *EncodingWriter, p unsafe.Pointer) error { 44 binary.LittleEndian.PutUint16(eb.Scratch[0:2], *(*uint16)(p)) 45 return eb.Write(eb.Scratch[0:2]) 46 } 47 48 func (t SSZUint16) Decode(dr *DecodingReader, p unsafe.Pointer) error { 49 v, err := dr.ReadUint16() 50 if err != nil { 51 return err 52 } 53 *(*uint16)(p) = v 54 return nil 55 } 56 57 func (t SSZUint16) DryCheck(dr *DecodingReader) error { 58 _, err := dr.Skip(2) 59 return err 60 } 61 62 func (t SSZUint16) HashTreeRoot(h MerkleFn, p unsafe.Pointer) (out [32]byte) { 63 binary.LittleEndian.PutUint16(out[:], *(*uint16)(p)) 64 return 65 } 66 67 func (t SSZUint16) Pretty(indent uint32, w *PrettyWriter, p unsafe.Pointer) { 68 w.WriteIndent(indent) 69 if *(*uint16)(p) == ^uint16(0) { 70 w.Write("0xFFFF") 71 } else { 72 w.Write(fmt.Sprintf("%d", *(*uint16)(p))) 73 } 74 }