package packet // UNSUBSCRIBE represents an UNSUBSCRIBE Packet. type UNSUBSCRIBE struct { base // PacketID is the Packet Identifier of the variable header. PacketID uint16 // TopicFilters represents a slice of the Topic Filters TopicFilters [][]byte } // setFixedHeader sets the fixed header to the Packet. func (p *UNSUBSCRIBE) setFixedHeader() { // Append the first byte to the fixed header. p.fixedHeader = append(p.fixedHeader, TypeUNSUBSCRIBE<<4|0x02) // Append the Remaining Length to the fixed header. p.appendRemainingLength() } // setVariableHeader sets the variable header to the Packet. func (p *UNSUBSCRIBE) setVariableHeader() { // Append the Packet Identifier to the variable header. p.variableHeader = append(p.variableHeader, encodeUint16(p.PacketID)...) } // setPayload sets the payload to the Packet. func (p *UNSUBSCRIBE) setPayload() { // Append each Topic Filter to the payload. for _, tf := range p.TopicFilters { // Append the Topic Filter to the payload. p.payload = appendLenStr(p.payload, tf) } } // NewUNSUBSCRIBE creates and returns an UNSUBSCRIBE Packet. func NewUNSUBSCRIBE(opts *UNSUBSCRIBEOptions) (Packet, error) { // Initialize the options. if opts == nil { opts = &UNSUBSCRIBEOptions{} } // Validate the options. if err := opts.validate(); err != nil { return nil, err } // Create a SUBSCRIBE Packet. p := &UNSUBSCRIBE{ PacketID: opts.PacketID, TopicFilters: opts.TopicFilters, } // Set the variable header to the Packet. p.setVariableHeader() // Set the payload to the Packet. p.setPayload() // Set the Fixed header to the Packet. p.setFixedHeader() // Return the Packet. return p, nil }