github.com/protolambda/zssz@v0.1.5/types/ssz_uint32.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 SSZUint32 struct{} 14 15 func (t SSZUint32) FuzzMinLen() uint64 { 16 return 4 17 } 18 19 func (t SSZUint32) FuzzMaxLen() uint64 { 20 return 4 21 } 22 23 func (t SSZUint32) MinLen() uint64 { 24 return 4 25 } 26 27 func (t SSZUint32) MaxLen() uint64 { 28 return 4 29 } 30 31 func (t SSZUint32) FixedLen() uint64 { 32 return 4 33 } 34 35 func (t SSZUint32) IsFixed() bool { 36 return true 37 } 38 39 func (t SSZUint32) SizeOf(p unsafe.Pointer) uint64 { 40 return 4 41 } 42 43 func (t SSZUint32) Encode(eb *EncodingWriter, p unsafe.Pointer) error { 44 binary.LittleEndian.PutUint32(eb.Scratch[0:4], *(*uint32)(p)) 45 return eb.Write(eb.Scratch[0:4]) 46 } 47 48 func (t SSZUint32) Decode(dr *DecodingReader, p unsafe.Pointer) error { 49 v, err := dr.ReadUint32() 50 if err != nil { 51 return err 52 } 53 *(*uint32)(p) = v 54 return nil 55 } 56 57 func (t SSZUint32) DryCheck(dr *DecodingReader) error { 58 _, err := dr.Skip(4) 59 return err 60 } 61 62 func (t SSZUint32) HashTreeRoot(h MerkleFn, p unsafe.Pointer) (out [32]byte) { 63 binary.LittleEndian.PutUint32(out[:], *(*uint32)(p)) 64 return 65 } 66 67 func (t SSZUint32) Pretty(indent uint32, w *PrettyWriter, p unsafe.Pointer) { 68 w.WriteIndent(indent) 69 if *(*uint32)(p) == ^uint32(0) { 70 w.Write("0xFFFFFFFF") 71 } else { 72 w.Write(fmt.Sprintf("%d", *(*uint32)(p))) 73 } 74 }