1package packets
2
3import (
4	"fmt"
5	"io"
6)
7
8//PubcompPacket is an internal representation of the fields of the
9//Pubcomp MQTT packet
10type PubcompPacket struct {
11	FixedHeader
12	MessageID uint16
13}
14
15func (pc *PubcompPacket) String() string {
16	str := fmt.Sprintf("%s", pc.FixedHeader)
17	str += " "
18	str += fmt.Sprintf("MessageID: %d", pc.MessageID)
19	return str
20}
21
22func (pc *PubcompPacket) Write(w io.Writer) error {
23	var err error
24	pc.FixedHeader.RemainingLength = 2
25	packet := pc.FixedHeader.pack()
26	packet.Write(encodeUint16(pc.MessageID))
27	_, err = packet.WriteTo(w)
28
29	return err
30}
31
32//Unpack decodes the details of a ControlPacket after the fixed
33//header has been read
34func (pc *PubcompPacket) Unpack(b io.Reader) error {
35	var err error
36	pc.MessageID, err = decodeUint16(b)
37
38	return err
39}
40
41//Details returns a Details struct containing the Qos and
42//MessageID of this ControlPacket
43func (pc *PubcompPacket) Details() Details {
44	return Details{Qos: pc.Qos, MessageID: pc.MessageID}
45}
46