module Network.XMPP.Stanza ( StanzaID (SID)
, From
, To
, XMLLang
, Stanza (..)
, MessageType (..)
, Message (..)
, message
, PresenceType (..)
, Presence (..)
, presence
, IQ (..)
, getId
, iqGet
, iqSet
, iqResult
, iqStanza
, iqAck
, iqPayloadNamespace
, iqPayload ) where
import Network.XMPP.JID
import Network.XMPP.Types
import Data.XML.Types
import qualified Data.Text as DT
import Data.Maybe (fromJust)
stanza :: Maybe StanzaID -> Maybe From -> Maybe To -> Maybe XMLLang -> Stanza
stanza i f t l = Stanza { stanzaID = i
, stanzaFrom = f
, stanzaTo = t
, stanzaLang = l }
message :: Maybe StanzaID -> Maybe From -> Maybe To -> Maybe XMLLang ->
MessageType -> [Element] -> Message
message i f t l t_ p = Message { messageStanza = stanza i f t l
, messageType = t_
, messagePayload = p }
presence :: Maybe StanzaID -> Maybe From -> Maybe To -> Maybe XMLLang ->
PresenceType -> [Element] -> Presence
presence i f t l t_ p = Presence { presenceStanza = Stanza { stanzaID = i
, stanzaFrom = f
, stanzaTo = t
, stanzaLang = l }
, presenceType = t_
, presencePayload = p }
iqGet :: Maybe StanzaID -> Maybe From -> Maybe To -> Maybe XMLLang -> Element ->
IQ
iqGet i f t l p = IQGet { iqGetStanza = Stanza { stanzaID = i
, stanzaFrom = f
, stanzaTo = t
, stanzaLang = l }
, iqGetPayload = p }
iqSet :: Maybe StanzaID -> Maybe From -> Maybe To -> Maybe XMLLang -> Element ->
IQ
iqSet i f t l p = IQSet { iqSetStanza = Stanza { stanzaID = i
, stanzaFrom = f
, stanzaTo = t
, stanzaLang = l }
, iqSetPayload = p }
iqResult :: Maybe StanzaID -> Maybe From -> Maybe To -> Maybe XMLLang ->
Maybe Element -> IQ
iqResult i f t l p = IQResult { iqResultStanza = Stanza { stanzaID = i
, stanzaFrom = f
, stanzaTo = t
, stanzaLang = l }
, iqResultPayload = p }
iqAck :: StanzaID -> To -> IQ
iqAck s t = iqResult (Just s) Nothing (Just t) Nothing Nothing
iqStanza :: IQ -> Stanza
iqStanza (IQGet { iqGetStanza = s }) = s
iqStanza (IQSet { iqSetStanza = s }) = s
iqStanza (IQResult { iqResultStanza = s }) = s
iqPayload :: IQ -> Maybe Element
iqPayload (IQGet {iqGetPayload = p}) = Just p
iqPayload (IQSet {iqSetPayload = p}) = Just p
iqPayload (IQResult {iqResultPayload = p}) = p
iqPayloadNamespace :: IQ -> Maybe String
iqPayloadNamespace i = case iqPayload i of
Nothing -> Nothing
Just p -> case nameNamespace $ elementName p of
Nothing -> Nothing
Just n -> Just (DT.unpack n)
getId :: IQ -> StanzaID
getId iq = fromJust $ stanzaID $ iqStanza iq