slynx-0.3.0: src/SLynx/Translate/Options.hs
{-# LANGUAGE DeriveGeneric #-}
-- |
-- Module : SLynx.Translate.Options
-- Description : ELynxSeq argument parsing
-- Copyright : (c) Dominik Schrempf 2018
-- License : GPL-3.0-or-later
--
-- Maintainer : dominik.schrempf@gmail.com
-- Stability : unstable
-- Portability : portable
--
-- Creation date: Sun Oct 7 17:29:45 2018.
module SLynx.Translate.Options
( TranslateArguments (..),
translateArguments,
)
where
import Data.List
import ELynx.Data.Alphabet.Alphabet
import ELynx.Data.Character.Codon
import ELynx.Tools
import Options.Applicative
import SLynx.Tools
-- | Arguments needed to translate sequences.
data TranslateArguments = TranslateArguments
{ trAlphabet :: Alphabet,
trInFile :: FilePath,
trReadingFrame :: Int,
trUniversalCode :: UniversalCode
}
deriving (Eq, Show, Generic)
instance Reproducible TranslateArguments where
inFiles = pure . trInFile
outSuffixes _ = [".fasta"]
getSeed _ = Nothing
setSeed = const
parser = translateArguments
cmdName = "translate"
cmdDsc = ["Translate from DNA to Protein or DNAX to ProteinX."]
instance FromJSON TranslateArguments
instance ToJSON TranslateArguments
-- | Command line parser.
translateArguments :: Parser TranslateArguments
translateArguments =
TranslateArguments
<$> alphabetOpt
<*> inFileArg
<*> readingFrameOpt
<*> universalCodeOpt
readingFrameOpt :: Parser Int
readingFrameOpt =
option auto $
long "reading-frame" <> short 'r' <> metavar "INT"
<> help
"Reading frame [0|1|2]."
universalCodeOpt :: Parser UniversalCode
universalCodeOpt =
option auto $
long "universal-code" <> short 'u' <> metavar "CODE"
<> help
("universal code; one of: " ++ codeStr ++ ".")
where
codes = allValues :: [UniversalCode]
codeWords = map show codes
codeStr = intercalate ", " codeWords
inFileArg :: Parser FilePath
inFileArg =
strArgument $ metavar "INPUT-FILE" <> help "Read sequences from INPUT-FILE"