packages feed

btc-lsp-0.1.0.0: src/BtcLsp/Yesod/Data/Language.hs

{-# LANGUAGE TemplateHaskell #-}

module BtcLsp.Yesod.Data.Language where

import BtcLsp.Import.External
import qualified Data.Text as T
import Database.Persist.TH
import qualified Universum

data Code
  = En
  | Ru
  deriving stock
    ( Show,
      Read,
      Eq,
      Enum,
      Bounded
    )

derivePersistField "Code"

codeList :: [Code]
codeList =
  [minBound .. maxBound]

instance PathPiece Code where
  fromPathPiece :: Text -> Maybe Code
  fromPathPiece =
    readMaybe
      . T.unpack
      . T.toTitle
  toPathPiece :: Code -> Text
  toPathPiece =
    T.toLower
      . T.pack
      . Universum.show