]> glassweightruler.freedombox.rocks Git - xdg-ninja.git/blob - lib/Program.hs
Separate prompts
[xdg-ninja.git] / lib / Program.hs
1 {-# LANGUAGE DeriveGeneric #-}
2 {-# LANGUAGE OverloadedStrings #-}
3
4 module Program where
5
6 import Data.Aeson
7 import Data.Aeson.Encode.Pretty
8 import qualified Data.ByteString.Lazy as B
9 import qualified Data.Text as T
10 import GHC.Generics
11
12 data File = File
13 { path :: String,
14 supportLevel :: SupportLevel,
15 help :: String
16 }
17 deriving (Generic, Show)
18
19 instance ToJSON File where
20 toEncoding (File path supportLevel help) = pairs ("path" .= path <> "movable" .= supportLevel <> "help" .= help)
21
22 data Program = Program
23 { name :: T.Text,
24 files :: [File]
25 }
26 deriving (Generic, Show)
27
28 instance ToJSON Program where
29 toEncoding = genericToEncoding defaultOptions
30
31 save :: Program -> IO ()
32 save program = do
33 let path = ("./programs/" ++ (T.unpack (name program)) ++ ".json")
34 B.writeFile path (encodePretty program)
35
36 data SupportLevel = Unsupported | Alias | EnvVars | Supported
37 deriving (Generic, Show)
38
39 instance ToJSON SupportLevel where
40 toEncoding Unsupported = toEncoding ( Bool False )
41 toEncoding _ = toEncoding ( Bool True )
42