{-# Language OverloadedStrings #-}
module Irc.UserInfo
( UserInfo(..)
, renderUserInfo
, parseUserInfo
, uiNick
) where
import Data.Text (Text)
import qualified Data.Text as Text
import Irc.Identifier
import Data.Monoid ((<>))
import Control.Lens
data UserInfo = UserInfo
{ userNick :: !Identifier
, userName :: !(Maybe Text)
, userHost :: !(Maybe Text)
}
deriving (Read, Show)
uiNick :: Lens' UserInfo Identifier
uiNick f ui@UserInfo{userNick = n} = (\n' -> ui{userNick = n'}) <$> f n
renderUserInfo :: UserInfo -> Text
renderUserInfo u = idText (userNick u)
<> maybe "" ("!" <>) (userName u)
<> maybe "" ("@" <>) (userHost u)
parseUserInfo :: Text -> UserInfo
parseUserInfo x = UserInfo
{ userNick = mkId nick
, userName = if Text.null user then Nothing else Just $! Text.drop 1 user
, userHost = if Text.null host then Nothing else Just $! Text.drop 1 host
}
where
(nickuser,host) = Text.break (=='@') x
(nick,user) = Text.break (=='!') nickuser