]> Git — Sourcephile - sourcephile-web.git/blob - generator/Site/Lang.hs
init
[sourcephile-web.git] / generator / Site / Lang.hs
1 module Site.Lang where
2
3 import Data.Aeson (FromJSON (parseJSON), withText)
4 import Data.Text qualified as Text
5 import Relude
6 import Prelude ()
7
8 -- * Type 'Lang'
9 data Lang
10 = LangDe
11 | LangEn
12 | LangFr
13 | LangJp
14 deriving (Bounded, Show, Enum, Eq)
15
16 langText :: IsString a => Lang -> a
17 langText = \case
18 LangDe -> "Deutsch"
19 LangEn -> "English"
20 LangFr -> "français"
21 LangJp -> "日本語"
22
23 parseLang :: Text -> Maybe Lang
24 parseLang = \case
25 "de" -> Just LangDe
26 "en" -> Just LangEn
27 "fr" -> Just LangFr
28 "jp" -> Just LangJp
29 _ -> Nothing
30
31 instance FromJSON Lang where
32 parseJSON =
33 withText "Lang" $
34 maybe (fail "expected a Lang") pure
35 . parseLang
36
37 textOfLang :: Lang -> Text
38 textOfLang = Text.drop 4 . Text.toLower . show