packages feed

phoityne-0.0.1.0: app/Phoityne/Argument.hs

{-# LANGUAGE GADTs               #-}
{-# LANGUAGE OverloadedStrings   #-}
{-# LANGUAGE DeriveDataTypeable  #-}
{-# OPTIONS_GHC -fno-cse         #-}

module Phoityne.Argument (
  HelpExitException(..)
, ArgData(..)
, config
) where

-- システム
import System.Console.CmdArgs
import qualified Control.Exception as E

-- |
--  ヘルプ表示時の例外
--
data HelpExitException = HelpExitException
                       deriving (Show, Typeable)

instance E.Exception HelpExitException

-- |
--  コマンドライン引数データ設定
--    モードを使用する場合のサンプル
--
data ArgData = ModeA
             {
               file   :: String
             , method :: Method
             }
             | ModeB
             {
               file  :: String
             , value :: Int
             } deriving (Data, Typeable, Show, Read, Eq)

-- |
--  アノテーション設定
--
config :: ArgData
config = modes [confA, confB]
         &= summary sumMsg
         &= program "prj-tpl"
         
  where
    confA = ModeA {
            file = def
             &= name "f"
             &= name "file"
             &= explicit
             &= typFile
             &= help "ini file"
          , method = enum
                   [
                     Get
                       &= name "get"
                       &= explicit
                       &= help "method type Get"
                   , Post
                       &= name "post"
                       &= explicit
                       &= help "  | type Post"
                   , Put
                       &= name "put"
                       &= explicit
                       &= help "  | type Put"
                   , Delete
                       &= name "delete"
                       &= explicit
                       &= help "  | type Delete"
                   ]
          } &= name "ModeA"
            &= details mdAMsg
            &= auto
    confB = ModeB {
            file = def
             &= name "f"
             &= name "file"
             &= explicit
             &= typFile
             &= help "ini file"
          , value = def
             &= name "value"
             &= explicit
             &= help "integer value"
          } &= name "ModeB"
            &= details mdBMsg

    sumMsg = unlines [
             ""
           , "  ☆ サマリ説明 ☆"
           , ""
           , "     ここに簡単な説明を記載する。"
           , ""
           ]
           
    mdAMsg = [
             ""
           , "  ★ 詳細説明 ★"
           , ""
           , "     ここにModeAの詳細な説明を記載する。"
           , ""
           ]

    mdBMsg = [
             ""
           , "  ★ 詳細説明 ★"
           , ""
           , "     ここにModeBの詳細な説明を記載する。"
           , ""
           ]

-- |
--  enum値引数
--
data Method = Get | Post | Put | Delete
              deriving (Data, Typeable, Show, Read, Eq)