func()

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
}