package pdu import "encoding/binary" type ( PDU interface { EncodeInto(*[]uint8) Encode() []uint8 Decode([]uint8) Size() uint32 } PDU_HEADER struct { command_length uint32 command_id uint32 command_status uint32 sequence_number uint32 } GENERIC_NACK struct { PDU_HEADER } ) func (p *PDU_HEADER) Encode() []uint8 { buf := make([]uint8, 16) binary.BigEndian.PutUint32(buf[0:4], p.command_length) binary.BigEndian.PutUint32(buf[4:8], p.command_id) binary.BigEndian.PutUint32(buf[8:12], p.command_status) binary.BigEndian.PutUint32(buf[12:16], p.sequence_number) return buf } func (p *PDU_HEADER) EncodeInto(buf *[]uint8) { bufVal := *buf binary.BigEndian.PutUint32(bufVal[0:4], p.command_length) binary.BigEndian.PutUint32(bufVal[4:8], p.command_id) binary.BigEndian.PutUint32(bufVal[8:12], p.command_status) binary.BigEndian.PutUint32(bufVal[12:16], p.sequence_number) } func (p *PDU_HEADER) Decode(data []uint8) { p.command_length = binary.BigEndian.Uint32(data[0:4]) p.command_id = binary.BigEndian.Uint32(data[4:8]) p.command_status = binary.BigEndian.Uint32(data[8:12]) p.sequence_number = binary.BigEndian.Uint32(data[12:16]) }