packages feed

pontarius-xmpp-0.0.5.0: Network/XMPP/Extensions/XEP0030.hs

{-# LANGUAGE MultiParamTypeClasses #-}

module Network.XMPP.Extensions.XEP0030 (
Feature (..),
Identity (..),
ServiceDiscoveryEntity (..),
serviceDiscoveryHandler,
serviceDiscoveryQuery
) where

import Network.XMPP.Session
import Network.XMPP.Types

import Control.Monad.State (StateT)
import Control.Monad.IO.Class (liftIO, MonadIO)

data Feature = Feature { featureVar :: XMLString }

data Identity = Identity { identityCategory :: XMLString
                         , identityName :: Maybe XMLString
                         , identityType :: XMLString }

class (ClientState s m, MonadIO m) => ServiceDiscoveryEntity s m where
    getFeatures :: JID -> StateT s m [Feature]
    getIdentities :: JID -> StateT s m [Identity]

serviceDiscoveryHandler :: (ClientState s m, MonadIO m,
    ServiceDiscoveryEntity s m) => ClientHandler s m

serviceDiscoveryHandler = serviceDiscoveryHandler

serviceDiscoveryQuery :: (ClientState s m, MonadIO m) => Session s m -> JID ->
    StateT s m ([Feature], [Identity]) -> Maybe (Timeout, StateT s m ()) ->
    Maybe (Either StreamError IQ) -> StateT s m ()

serviceDiscoveryQuery = serviceDiscoveryQuery