1 {-# LANGUAGE DeriveDataTypeable #-}
2 {-# LANGUAGE OverloadedStrings #-}
3 {-# LANGUAGE DuplicateRecordFields #-}
4 {-# LANGUAGE DeriveGeneric #-}
10 import Data.Aeson.Types
11 import Data.Text hiding (map, init, length, splitAt, zip)
12 import Data.Text.Lazy (toStrict)
15 import Data.Aeson.Text
17 data GlobalConfig = GlobalConfig {
19 commitCommand :: Maybe Text,
20 gitRemote :: Maybe Text
21 } deriving (Show, Generic)
23 data LocalConfig = LocalConfig {
28 commitCommand :: Maybe Text,
29 gitRemote :: Maybe Text
30 } deriving (Show, Generic)
32 data ProjectConfig = ProjectConfig {
37 commitCommand :: Maybe Text,
38 gitRemote :: Maybe Text
39 } deriving (Show, Generic)
41 instance ToJSON GlobalConfig where
42 toJSON = genericToJSON defaultOptions
43 { omitNothingFields = False }
45 instance FromJSON GlobalConfig where
46 parseJSON = genericParseJSON defaultOptions
47 { omitNothingFields = False }
49 instance ToJSON LocalConfig where
50 toJSON = genericToJSON defaultOptions
51 { omitNothingFields = True }
53 instance FromJSON LocalConfig where
54 parseJSON = genericParseJSON defaultOptions
55 { omitNothingFields = True }
57 maybeTrump :: LocalConfig -> GlobalConfig -> (LocalConfig -> Maybe a) -> (GlobalConfig -> Maybe a) -> Maybe a
58 maybeTrump l g lf gf = case lf l of
62 trump :: LocalConfig -> GlobalConfig -> (LocalConfig -> Maybe a) -> (GlobalConfig -> a) -> a
63 trump l g lf gf = case lf l of
67 getProjectConfig :: GlobalConfig -> LocalConfig -> ProjectConfig
68 getProjectConfig g l = ProjectConfig
69 (name (l :: LocalConfig))
70 (description (l :: LocalConfig))
71 (theme (l :: LocalConfig))
72 (trumper editor editor)
73 (maybeTrumper commitCommand commitCommand)
74 (maybeTrumper gitRemote gitRemote)
77 maybeTrumper = maybeTrump l g