{-# LANGUAGE DeriveGeneric #-}
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
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
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"