1package packets
2
3import (
4	"fmt"
5	"io"
6)
7
8//PubrecPacket is an internal representation of the fields of the
9//Pubrec MQTT packet
10type PubrecPacket struct {
11	FixedHeader
12	MessageID uint16
13}
14
15func (pr *PubrecPacket) String() string {
16	str := fmt.Sprintf("%s", pr.FixedHeader)
17	str += " "
18	str += fmt.Sprintf("MessageID: %d", pr.MessageID)
19	return str
20}
21
22func (pr *PubrecPacket) Write(w io.Writer) error {
23	var err error
24	pr.FixedHeader.RemainingLength = 2
25	packet := pr.FixedHeader.pack()
26	packet.Write(encodeUint16(pr.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 (pr *PubrecPacket) Unpack(b io.Reader) error {
35	var err error
36	pr.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 (pr *PubrecPacket) Details() Details {
44	return Details{Qos: pr.Qos, MessageID: pr.MessageID}
45}
46