github.com/segmentio/encoding@v0.4.0/proto/bool.go (about) 1 package proto 2 3 import ( 4 "io" 5 "unsafe" 6 ) 7 8 var boolCodec = codec{ 9 wire: varint, 10 size: sizeOfBool, 11 encode: encodeBool, 12 decode: decodeBool, 13 } 14 15 func sizeOfBool(p unsafe.Pointer, flags flags) int { 16 if p != nil && *(*bool)(p) || flags.has(wantzero) { 17 return 1 18 } 19 return 0 20 } 21 22 func encodeBool(b []byte, p unsafe.Pointer, flags flags) (int, error) { 23 if p != nil && *(*bool)(p) || flags.has(wantzero) { 24 if len(b) == 0 { 25 return 0, io.ErrShortBuffer 26 } 27 b[0] = 1 28 return 1, nil 29 } 30 return 0, nil 31 } 32 33 func decodeBool(b []byte, p unsafe.Pointer, _ flags) (int, error) { 34 if len(b) == 0 { 35 return 0, io.ErrUnexpectedEOF 36 } 37 *(*bool)(p) = b[0] != 0 38 return 1, nil 39 }