in e2e-checksum/main.go [26:52]
func (c *myCodec) Marshal(v interface{}) ([]byte, error) {
bytes, err := c.protoCodec.Marshal(v)
if err != nil {
return bytes, err
}
crc32c := crc32.MakeTable(crc32.Castagnoli)
checksum := crc32.Checksum(bytes, crc32c)
buffer := proto.NewBuffer([]byte{})
// calculate checksum tag (field & wire type)
tag := (checksumField << 3) | checksumWireType
if err = buffer.EncodeVarint(uint64(tag)); err != nil {
return bytes, err
}
if err = buffer.EncodeFixed32(uint64(checksum)); err != nil {
return bytes, err
}
log.Printf("encoded checksum field and value: %+v\n", buffer.Bytes())
newBytes := append(buffer.Bytes(), bytes...) // prepend
//newBytes := append(bytes, buffer.Bytes()...) // append
log.Printf("Marshalled bytes: %+v\n", bytes)
return newBytes, err
}