module Language.Docker.Parser.Arguments
  ( arguments,
  )
where

import qualified Data.Text as T
import Language.Docker.Parser.Prelude
import Language.Docker.Syntax

-- Parse arguments of a command in the exec form
argumentsExec :: (?esc :: Char) => Parser (Arguments Text)
argumentsExec :: (?esc::Char) => Parser (Arguments Text)
argumentsExec = do
  [Text]
args <- forall a. (?esc::Char) => Parser a -> Parser a
brackets forall a b. (a -> b) -> a -> b
$ forall a. (?esc::Char) => Parser a -> Parser [a]
commaSep (?esc::Char) => Parser Text
doubleQuotedStringEscaped
  forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ forall args. args -> Arguments args
ArgumentsList ([Text] -> Text
T.unwords [Text]
args)

-- Parse arguments of a command in the shell form
argumentsShell :: (?esc :: Char) => Parser (Arguments Text)
argumentsShell :: (?esc::Char) => Parser (Arguments Text)
argumentsShell =
  forall e s (m :: * -> *) a. MonadParsec e s m => m a -> m a
try (forall args. args -> Arguments args
ArgumentsText forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (?esc::Char) => Parser Text
untilHeredoc)
    forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> (forall args. args -> Arguments args
ArgumentsText forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Text
toEnd)
  where
    toEnd :: Parser Text
toEnd = (?esc::Char) => String -> Parser Text
untilEol String
"the shell arguments"

-- Parse arguments of a command in the heredoc format
argumentsHeredoc :: (?esc :: Char) => Parser (Arguments Text)
argumentsHeredoc :: (?esc::Char) => Parser (Arguments Text)
argumentsHeredoc = forall args. args -> Arguments args
ArgumentsText forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (?esc::Char) => Parser Text
heredoc

arguments :: (?esc :: Char) => Parser (Arguments Text)
arguments :: (?esc::Char) => Parser (Arguments Text)
arguments = forall e s (m :: * -> *) a. MonadParsec e s m => m a -> m a
try (?esc::Char) => Parser (Arguments Text)
argumentsHeredoc
  forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> forall e s (m :: * -> *) a. MonadParsec e s m => m a -> m a
try (?esc::Char) => Parser (Arguments Text)
argumentsExec
  forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> forall e s (m :: * -> *) a. MonadParsec e s m => m a -> m a
try (?esc::Char) => Parser (Arguments Text)
argumentsShell