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