-- |
-- Module      :  SLynx.SLynx
-- Description :  SLynx module
-- Copyright   :  (c) Dominik Schrempf 2021
-- License     :  GPL-3.0-or-later
--
-- Maintainer  :  dominik.schrempf@gmail.com
-- Stability   :  unstable
-- Portability :  portable
--
-- Creation date: Thu Apr 23 16:38:55 2020.
module SLynx.SLynx
  ( slynx,
    rSLynx,
  )
where

import ELynx.Tools
import SLynx.Concatenate.Concatenate
import SLynx.Examine.Examine
import SLynx.Filter.Filter
import SLynx.Options
import SLynx.Simulate.Simulate
import SLynx.SubSample.SubSample
import SLynx.Translate.Translate

-- | Run SLynx with given arguments.
slynx :: Arguments CommandArguments -> IO ()
slynx :: Arguments CommandArguments -> IO ()
slynx Arguments CommandArguments
c = case Arguments CommandArguments -> CommandArguments
forall a. Arguments a -> a
local Arguments CommandArguments
c of
  Concatenate ConcatenateArguments
_ ->
    Arguments CommandArguments
-> (Arguments CommandArguments -> Arguments ConcatenateArguments)
-> ELynx ConcatenateArguments ()
-> IO ()
forall a b.
(Eq a, Show a, Reproducible a, ToJSON a) =>
Arguments a -> (Arguments a -> Arguments b) -> ELynx b () -> IO ()
eLynxWrapper
      Arguments CommandArguments
c
      (\(Arguments GlobalArguments
g (Concatenate ConcatenateArguments
l)) -> GlobalArguments
-> ConcatenateArguments -> Arguments ConcatenateArguments
forall a. GlobalArguments -> a -> Arguments a
Arguments GlobalArguments
g ConcatenateArguments
l)
      ELynx ConcatenateArguments ()
concatenateCmd
  Examine ExamineArguments
_ ->
    Arguments CommandArguments
-> (Arguments CommandArguments -> Arguments ExamineArguments)
-> ELynx ExamineArguments ()
-> IO ()
forall a b.
(Eq a, Show a, Reproducible a, ToJSON a) =>
Arguments a -> (Arguments a -> Arguments b) -> ELynx b () -> IO ()
eLynxWrapper Arguments CommandArguments
c (\(Arguments GlobalArguments
g (Examine ExamineArguments
l)) -> GlobalArguments -> ExamineArguments -> Arguments ExamineArguments
forall a. GlobalArguments -> a -> Arguments a
Arguments GlobalArguments
g ExamineArguments
l) ELynx ExamineArguments ()
examineCmd
  FilterCols FilterColsArguments
_ ->
    Arguments CommandArguments
-> (Arguments CommandArguments -> Arguments FilterColsArguments)
-> ELynx FilterColsArguments ()
-> IO ()
forall a b.
(Eq a, Show a, Reproducible a, ToJSON a) =>
Arguments a -> (Arguments a -> Arguments b) -> ELynx b () -> IO ()
eLynxWrapper
      Arguments CommandArguments
c
      (\(Arguments GlobalArguments
g (FilterCols FilterColsArguments
l)) -> GlobalArguments
-> FilterColsArguments -> Arguments FilterColsArguments
forall a. GlobalArguments -> a -> Arguments a
Arguments GlobalArguments
g FilterColsArguments
l)
      ELynx FilterColsArguments ()
filterColsCmd
  FilterRows FilterRowsArguments
_ ->
    Arguments CommandArguments
-> (Arguments CommandArguments -> Arguments FilterRowsArguments)
-> ELynx FilterRowsArguments ()
-> IO ()
forall a b.
(Eq a, Show a, Reproducible a, ToJSON a) =>
Arguments a -> (Arguments a -> Arguments b) -> ELynx b () -> IO ()
eLynxWrapper
      Arguments CommandArguments
c
      (\(Arguments GlobalArguments
g (FilterRows FilterRowsArguments
l)) -> GlobalArguments
-> FilterRowsArguments -> Arguments FilterRowsArguments
forall a. GlobalArguments -> a -> Arguments a
Arguments GlobalArguments
g FilterRowsArguments
l)
      ELynx FilterRowsArguments ()
filterRowsCmd
  Simulate SimulateArguments
_ ->
    Arguments CommandArguments
-> (Arguments CommandArguments -> Arguments SimulateArguments)
-> ELynx SimulateArguments ()
-> IO ()
forall a b.
(Eq a, Show a, Reproducible a, ToJSON a) =>
Arguments a -> (Arguments a -> Arguments b) -> ELynx b () -> IO ()
eLynxWrapper Arguments CommandArguments
c (\(Arguments GlobalArguments
g (Simulate SimulateArguments
l)) -> GlobalArguments -> SimulateArguments -> Arguments SimulateArguments
forall a. GlobalArguments -> a -> Arguments a
Arguments GlobalArguments
g SimulateArguments
l) ELynx SimulateArguments ()
simulateCmd
  SubSample SubSampleArguments
_ ->
    Arguments CommandArguments
-> (Arguments CommandArguments -> Arguments SubSampleArguments)
-> ELynx SubSampleArguments ()
-> IO ()
forall a b.
(Eq a, Show a, Reproducible a, ToJSON a) =>
Arguments a -> (Arguments a -> Arguments b) -> ELynx b () -> IO ()
eLynxWrapper
      Arguments CommandArguments
c
      (\(Arguments GlobalArguments
g (SubSample SubSampleArguments
l)) -> GlobalArguments
-> SubSampleArguments -> Arguments SubSampleArguments
forall a. GlobalArguments -> a -> Arguments a
Arguments GlobalArguments
g SubSampleArguments
l)
      ELynx SubSampleArguments ()
subSampleCmd
  Translate TranslateArguments
_ ->
    Arguments CommandArguments
-> (Arguments CommandArguments -> Arguments TranslateArguments)
-> ELynx TranslateArguments ()
-> IO ()
forall a b.
(Eq a, Show a, Reproducible a, ToJSON a) =>
Arguments a -> (Arguments a -> Arguments b) -> ELynx b () -> IO ()
eLynxWrapper
      Arguments CommandArguments
c
      (\(Arguments GlobalArguments
g (Translate TranslateArguments
l)) -> GlobalArguments
-> TranslateArguments -> Arguments TranslateArguments
forall a. GlobalArguments -> a -> Arguments a
Arguments GlobalArguments
g TranslateArguments
l)
      ELynx TranslateArguments ()
translateCmd

-- | Run SLynx, parse arguments from command line.
rSLynx :: IO ()
rSLynx :: IO ()
rSLynx = IO (Arguments CommandArguments)
forall a. Reproducible a => IO (Arguments a)
parseArguments IO (Arguments CommandArguments)
-> (Arguments CommandArguments -> IO ()) -> IO ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Arguments CommandArguments -> IO ()
slynx