{-# LANGUAGE TemplateHaskell #-}
module Bytor.Types where
import Data.Map.Strict (Map)
import qualified Data.Map.Strict as Map
import Data.Sequence (Seq)
import qualified Data.Sequence as Seq
import Data.ByteString (ByteString)
import Data.Text (Text)
import Data.Time.Clock (UTCTime)
import Lens.Micro.Platform (makeLenses)
import Network.Courriel.Types
data Modifier
= None
| Ctrl
| Meta
deriving (Eq, Show, Read, Ord)
data KeyCode = KeyCode
{ _kcChar :: Char
, _kcMod :: Modifier
} deriving (Eq, Show, Read, Ord)
makeLenses ''KeyCode
data Action
= Quit
deriving (Eq, Show, Read)
data Config = Config
{ _confKeymap :: Map KeyCode Action
} deriving (Eq, Show, Read)
defaultKeymap :: Map KeyCode Action
defaultKeymap = Map.fromList
[ (KeyCode 'q' Ctrl, Quit)
]
makeLenses ''Config
newtype Mbox = Mbox { _mbEmails :: Seq Email }
deriving (Eq, Show, Read)
makeLenses ''Mailbox
data State = State
{ _stConfiguration :: Config
, _stMailboxes :: Mbox
, _stMessage :: Text
} deriving (Eq, Show, Read)
emptyState :: State
emptyState = State
{ _stConfiguration = Config defaultKeymap
, _stMailboxes = Mbox Seq.empty
, _stMessage = "Hello"
}
makeLenses ''State
data Cursor = Cursor
deriving (Eq, Show, Ord)
data Event = Event
deriving (Eq, Show, Ord)