packages feed

language-docker-10.4.3: src/Language/Docker/Parser/Arguments.hs

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 = do
  args <- brackets $ commaSep doubleQuotedStringEscaped
  return $ ArgumentsList (T.unwords args)

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

-- Parse arguments of a command in the heredoc format
argumentsHeredoc :: Parser (Arguments Text)
argumentsHeredoc = ArgumentsText <$> heredoc

arguments :: (?esc :: Char) => Parser (Arguments Text)
arguments = try argumentsHeredoc
  <|> try argumentsExec
  <|> try argumentsShell