haskell-xmpp-1.0.1: src/Network/XMPP/JID.hs
-----------------------------------------------------------------------------
-- |
-- Module : Network.XMPP.JID
-- Copyright : (c) pierre, 2006
-- License : BSD-style (see the file libraries/base/LICENSE)
--
-- Maintainer : pierre <k.pierre.k@gmail.com>
-- Stability : experimental
-- Portability : portable
--
-- JID datatype and functions
--
-----------------------------------------------------------------------------
-- jid components and functions
-- probably import Stringprep
module Network.XMPP.JID
( JID(..)
) where
import Text.Regex
-- | Jabber ID (JID) datatype
data JID = JID { name :: Maybe String
-- ^ Account name
, server :: String
-- ^ Server adress
, resource :: Maybe String
-- ^ Resource name
}
instance Read JID where
-- Reads JID from string (name@server\/resource)
readsPrec _ str = case matchRegexAll regex str of
Just (_,_,after,(_:name:_:server:_:_:resource:_:[])) -> [((JID (toMaybe name) server (toMaybe resource)), after)]
Just _ -> []
Nothing -> []
where
toMaybe "" = Nothing
toMaybe s = Just s
regex = mkRegex $
"((([^@])+)@)?" ++
"(([^/])+)" ++
"(/((.)+))?"
instance Show JID where
-- Shows JID
show jid = concat [name', server jid, resource']
where name' = maybe "" (++"@") (name jid)
resource' = maybe "" (++"/") (resource jid)