module Rest.Gen.Config where
import Prelude hiding ((.), id)
import Control.Category
import Data.Label
import System.Console.GetOpt
data Action = MakeDocs String | MakeJS | MakeRb | MakeHS
data Location = Default | Stream | Location String
data Config = Config
{ _action :: Maybe Action
, _source :: Location
, _target :: Location
, _apiVersion :: String
, _apiPrivate :: Bool
}
$(mkLabels [''Config])
defaultConfig :: Config
defaultConfig = Config
{ _action = Nothing
, _source = Default
, _target = Default
, _apiVersion = "latest"
, _apiPrivate = True
}
parseLocation :: String -> Location
parseLocation "-" = Stream
parseLocation s = Location s
options :: (a :-> Config) -> [OptDescr (a -> a)]
options parent =
[ Option ['d'] ["documentation"] (ReqArg (set (action . parent) . Just . MakeDocs) "URLROOT") "Generate API documentation, available under the provided URL root."
, Option ['j'] ["javascript"] (NoArg (set (action . parent) (Just MakeJS))) "Generate Javascript bindings."
, Option ['r'] ["ruby"] (NoArg (set (action . parent) (Just MakeRb))) "Generate Ruby bindings."
, Option ['h'] ["haskell"] (NoArg (set (action . parent) (Just MakeHS))) "Generate Haskell bindings."
, Option ['s'] ["source"] (ReqArg (set (source . parent) . parseLocation) "LOCATION") "The location of additional sources."
, Option ['t'] ["target"] (ReqArg (set (target . parent) . parseLocation) "LOCATION") "The target location for generation."
, Option ['v'] ["version"] (ReqArg (set (apiVersion . parent)) "VERSION") "The version of the API under generation. Default latest."
, Option ['p'] ["hide-private"] (NoArg (set (apiPrivate . parent) False)) "Generate API for the public, hiding private resources. Not default."
]