packages feed

Hach-0.1.1: server/Server/Storage.hs

module Server.Storage
  ( NickStorage(..)
  , newStorage, getNick, putNick, delId
  , doesNickExist
  , showStorage
  ) where

import Control.Applicative ((<$>))
import Control.Concurrent.MVar
import qualified Data.Map as M
import Data.Text

type ClientId = Int

data NickStorage = NickStorage (MVar (M.Map ClientId Text))

newStorage :: IO NickStorage
newStorage = NickStorage <$> newMVar M.empty

getNick :: NickStorage -> ClientId -> IO (Maybe Text)
getNick (NickStorage s) c = M.lookup c <$> readMVar s

putNick :: NickStorage -> ClientId -> Text -> IO ()
putNick (NickStorage s) c n = modifyMVar_ s $ return . M.insert c n

delId :: NickStorage -> ClientId -> IO ()
delId (NickStorage s) c = modifyMVar_ s $ return . M.delete c

doesNickExist :: NickStorage -> Text -> IO Bool
doesNickExist (NickStorage s) n = elem n <$> M.elems <$> readMVar s

showStorage :: NickStorage -> IO ()
showStorage (NickStorage s) = print =<< readMVar s