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 :: Parser (Arguments Text)
argumentsExec = do
  args <- brackets $ commaSep stringLiteral
  return $ ArgumentsList (T.unwords args)

-- Parse arguments of a command in the shell form
argumentsShell :: Parser (Arguments Text)
argumentsShell = ArgumentsText <$> toEnd
  where
    toEnd = untilEol "the shell arguments"

arguments :: Parser (Arguments Text)
arguments = try argumentsExec <|> try argumentsShell