aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/Options.purs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Options.purs')
-rw-r--r--src/Options.purs77
1 files changed, 52 insertions, 25 deletions
diff --git a/src/Options.purs b/src/Options.purs
index b96cddc..c47bebc 100644
--- a/src/Options.purs
+++ b/src/Options.purs
@@ -2,6 +2,7 @@ module PursLoader.Options
2 ( pscMakeOptions 2 ( pscMakeOptions
3 , pscMakeDefaultOutput 3 , pscMakeDefaultOutput
4 , pscMakeOutputOption 4 , pscMakeOutputOption
5 , loaderSrcOption
5 ) where 6 ) where
6 7
7import Data.Either (either) 8import Data.Either (either)
@@ -24,6 +25,12 @@ verboseErrorsOpt = "verbose-errors"
24 25
25outputOpt = "output" 26outputOpt = "output"
26 27
28commentsOpt = "comments"
29
30noPrefixOpt = "no-prefix"
31
32srcOpt = "src"
33
27pscMakeDefaultOutput = "output" 34pscMakeDefaultOutput = "output"
28 35
29newtype Options 36newtype Options
@@ -32,29 +39,42 @@ newtype Options
32 , noMagicDo :: NullOrUndefined Boolean 39 , noMagicDo :: NullOrUndefined Boolean
33 , noTco :: NullOrUndefined Boolean 40 , noTco :: NullOrUndefined Boolean
34 , verboseErrors :: NullOrUndefined Boolean 41 , verboseErrors :: NullOrUndefined Boolean
42 , comments :: NullOrUndefined Boolean
35 , output :: NullOrUndefined String 43 , output :: NullOrUndefined String
44 , noPrefix :: NullOrUndefined Boolean
45 , src :: NullOrUndefined [String]
36 } 46 }
37 47
38instance isForeignOptions :: IsForeign Options where 48instance isForeignOptions :: IsForeign Options where
39 read obj = (\a b c d e f -> 49 read obj = Options <$> ({ noPrelude: _
40 Options { noPrelude: a 50 , noOpts: _
41 , noOpts: b 51 , noMagicDo: _
42 , noMagicDo: c 52 , noTco: _
43 , noTco: d 53 , verboseErrors: _
44 , verboseErrors: e 54 , comments: _
45 , output: f 55 , output: _
46 }) <$> readProp noPreludeOpt obj 56 , noPrefix: _
47 <*> readProp noOptsOpt obj 57 , src: _
48 <*> readProp noMagicDoOpt obj 58 } <$> readProp noPreludeOpt obj
49 <*> readProp noTcoOpt obj 59 <*> readProp noOptsOpt obj
50 <*> readProp verboseErrorsOpt obj 60 <*> readProp noMagicDoOpt obj
51 <*> readProp outputOpt obj 61 <*> readProp noTcoOpt obj
52 62 <*> readProp verboseErrorsOpt obj
53booleanOpt :: String -> NullOrUndefined Boolean -> [String] 63 <*> readProp commentsOpt obj
54booleanOpt key opt = maybe [] (\a -> if a then ["--" ++ key] else []) (runNullOrUndefined opt) 64 <*> readProp outputOpt obj
55 65 <*> readProp noPrefixOpt obj
56stringOpt :: String -> NullOrUndefined String -> [String] 66 <*> readProp srcOpt obj)
57stringOpt key opt = maybe [] (\a -> ["--" ++ key ++ "=" ++ a]) (runNullOrUndefined opt) 67
68class LoaderOption a where
69 opt :: String -> NullOrUndefined a -> [String]
70
71instance booleanLoaderOption :: LoaderOption Boolean where
72 opt key opt = maybe [] (\a -> if a then ["--" ++ key] else [])
73 (runNullOrUndefined opt)
74
75instance stringLoaderOption :: LoaderOption String where
76 opt key opt = maybe [] (\a -> ["--" ++ key ++ "=" ++ a])
77 (runNullOrUndefined opt)
58 78
59pscMakeOutputOption :: Foreign -> Maybe String 79pscMakeOutputOption :: Foreign -> Maybe String
60pscMakeOutputOption query = either (const Nothing) 80pscMakeOutputOption query = either (const Nothing)
@@ -64,9 +84,16 @@ pscMakeOutputOption query = either (const Nothing)
64pscMakeOptions :: Foreign -> [String] 84pscMakeOptions :: Foreign -> [String]
65pscMakeOptions query = either (const []) fold parsed 85pscMakeOptions query = either (const []) fold parsed
66 where parsed = read query :: F Options 86 where parsed = read query :: F Options
67 fold (Options a) = booleanOpt noPreludeOpt a.noPrelude <> 87 fold (Options a) = opt noPreludeOpt a.noPrelude <>
68 booleanOpt noOptsOpt a.noOpts <> 88 opt noOptsOpt a.noOpts <>
69 booleanOpt noMagicDoOpt a.noMagicDo <> 89 opt noMagicDoOpt a.noMagicDo <>
70 booleanOpt noTcoOpt a.noTco <> 90 opt noTcoOpt a.noTco <>
71 booleanOpt verboseErrorsOpt a.verboseErrors <> 91 opt verboseErrorsOpt a.verboseErrors <>
72 stringOpt outputOpt a.output 92 opt commentsOpt a.comments <>
93 opt outputOpt a.output <>
94 opt noPrefixOpt a.noPrefix
95
96loaderSrcOption :: Foreign -> Maybe [String]
97loaderSrcOption query = either (const Nothing)
98 (\(Options a) -> runNullOrUndefined a.src)
99 (read query)