42 lines
1.2 KiB
Haskell
42 lines
1.2 KiB
Haskell
module Utils.Frontend.I18n
|
|
( FrontendMessage(..)
|
|
) where
|
|
|
|
import ClassyPrelude
|
|
import Data.Universe
|
|
|
|
import Control.Lens
|
|
import Utils.PathPiece
|
|
|
|
import Web.PathPieces
|
|
import Data.Aeson
|
|
import Data.Aeson.Types (toJSONKeyText)
|
|
import Data.Aeson.TH
|
|
import qualified Data.Char as Char
|
|
|
|
|
|
-- | I18n-Messages used in JavaScript-Frontend
|
|
--
|
|
-- Only nullary constructors are supported
|
|
--
|
|
-- @MsgCamelCaseIdentifier@ gets translated to @camelCaseIdentifier@ in Frontend (see `nullaryPathPiece` and `deriveJSON` below)
|
|
data FrontendMessage = MsgFilesSelected
|
|
| MsgSelectFile
|
|
| MsgSelectFiles
|
|
| MsgAsyncFormFailure
|
|
deriving (Eq, Ord, Enum, Bounded, Read, Show, Generic, Typeable)
|
|
instance Universe FrontendMessage
|
|
instance Finite FrontendMessage
|
|
instance Hashable FrontendMessage
|
|
|
|
nullaryPathPiece ''FrontendMessage $ over _head Char.toLower . mconcat . drop 1 . splitCamel
|
|
|
|
deriveJSON defaultOptions
|
|
{ constructorTagModifier = over _head Char.toLower . mconcat . drop 1 . splitCamel
|
|
} ''FrontendMessage
|
|
|
|
instance ToJSONKey FrontendMessage where
|
|
toJSONKey = toJSONKeyText toPathPiece
|
|
instance FromJSONKey FrontendMessage where
|
|
fromJSONKey = FromJSONKeyTextParser $ parseJSON . String
|