mqtt-0.1.0.0: src/Network/MQTT/Message/QoS.hs
{-# LANGUAGE TypeFamilies #-}
--------------------------------------------------------------------------------
-- |
-- Module : Network.MQTT.Message
-- Copyright : (c) Lars Petersen 2016
-- License : MIT
--
-- Maintainer : info@lars-petersen.net
-- Stability : experimental
--------------------------------------------------------------------------------
module Network.MQTT.Message.QoS where
import Network.MQTT.Trie
-- | The quality of service defines the guarantees given wrt to message reception.
data QoS
= QoS0 -- ^ Message delivery is not guaranteed.
| QoS1 -- ^ Message is guaranteed to be delivered at least once.
| QoS2 -- ^ Message is guaranteed to be delivered exactly once.
deriving (Eq, Ord, Show, Enum, Bounded)
instance TrieValue QoS where
data TrieNode QoS = QosNode {-# UNPACK #-} !Int !(Trie QoS)
node t (Just QoS0) = QosNode 0 t
node t (Just QoS1) = QosNode 1 t
node t (Just QoS2) = QosNode 2 t
node t Nothing = QosNode 3 t
nodeNull = const False
nodeTree (QosNode _ t) = t
nodeValue (QosNode 0 _) = Just QoS0
nodeValue (QosNode 1 _) = Just QoS1
nodeValue (QosNode 2 _) = Just QoS2
nodeValue (QosNode _ _) = Nothing