{-# 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