-- |
-- 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
l -> GlobalArguments
-> ConcatenateArguments
-> (ConcatenateArguments -> CommandArguments)
-> ELynx ConcatenateArguments ()
-> IO ()
forall a b.
(Eq a, Show a, Reproducible a, Reproducible b, ToJSON a) =>
GlobalArguments -> b -> (b -> a) -> ELynx b () -> IO ()
eLynxWrapper GlobalArguments
g ConcatenateArguments
l ConcatenateArguments -> CommandArguments
Concatenate ELynx ConcatenateArguments ()
concatenateCmd
  Examine ExamineArguments
l -> GlobalArguments
-> ExamineArguments
-> (ExamineArguments -> CommandArguments)
-> ELynx ExamineArguments ()
-> IO ()
forall a b.
(Eq a, Show a, Reproducible a, Reproducible b, ToJSON a) =>
GlobalArguments -> b -> (b -> a) -> ELynx b () -> IO ()
eLynxWrapper GlobalArguments
g ExamineArguments
l ExamineArguments -> CommandArguments
Examine ELynx ExamineArguments ()
examineCmd
  FilterCols FilterColsArguments
l -> GlobalArguments
-> FilterColsArguments
-> (FilterColsArguments -> CommandArguments)
-> ELynx FilterColsArguments ()
-> IO ()
forall a b.
(Eq a, Show a, Reproducible a, Reproducible b, ToJSON a) =>
GlobalArguments -> b -> (b -> a) -> ELynx b () -> IO ()
eLynxWrapper GlobalArguments
g FilterColsArguments
l FilterColsArguments -> CommandArguments
FilterCols ELynx FilterColsArguments ()
filterColsCmd
  FilterRows FilterRowsArguments
l -> GlobalArguments
-> FilterRowsArguments
-> (FilterRowsArguments -> CommandArguments)
-> ELynx FilterRowsArguments ()
-> IO ()
forall a b.
(Eq a, Show a, Reproducible a, Reproducible b, ToJSON a) =>
GlobalArguments -> b -> (b -> a) -> ELynx b () -> IO ()
eLynxWrapper GlobalArguments
g FilterRowsArguments
l FilterRowsArguments -> CommandArguments
FilterRows ELynx FilterRowsArguments ()
filterRowsCmd
  Simulate SimulateArguments
l -> GlobalArguments
-> SimulateArguments
-> (SimulateArguments -> CommandArguments)
-> ELynx SimulateArguments ()
-> IO ()
forall a b.
(Eq a, Show a, Reproducible a, Reproducible b, ToJSON a) =>
GlobalArguments -> b -> (b -> a) -> ELynx b () -> IO ()
eLynxWrapper GlobalArguments
g SimulateArguments
l SimulateArguments -> CommandArguments
Simulate ELynx SimulateArguments ()
simulateCmd
  SubSample SubSampleArguments
l -> GlobalArguments
-> SubSampleArguments
-> (SubSampleArguments -> CommandArguments)
-> ELynx SubSampleArguments ()
-> IO ()
forall a b.
(Eq a, Show a, Reproducible a, Reproducible b, ToJSON a) =>
GlobalArguments -> b -> (b -> a) -> ELynx b () -> IO ()
eLynxWrapper GlobalArguments
g SubSampleArguments
l SubSampleArguments -> CommandArguments
SubSample ELynx SubSampleArguments ()
subSampleCmd
  Translate TranslateArguments
l -> GlobalArguments
-> TranslateArguments
-> (TranslateArguments -> CommandArguments)
-> ELynx TranslateArguments ()
-> IO ()
forall a b.
(Eq a, Show a, Reproducible a, Reproducible b, ToJSON a) =>
GlobalArguments -> b -> (b -> a) -> ELynx b () -> IO ()
eLynxWrapper GlobalArguments
g TranslateArguments
l TranslateArguments -> CommandArguments
Translate ELynx TranslateArguments ()
translateCmd
  where
    g :: GlobalArguments
g = Arguments CommandArguments -> GlobalArguments
forall a. Arguments a -> GlobalArguments
global Arguments CommandArguments
c

-- | 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