packages feed

mdoc-0.2.0.0: src/Mdoc/Data/Option.hs

-- |
--
-- Module      : Mdoc.Data.Option
-- Copyright   : (c) 2026 Patrick Brisbin
-- License     : AGPL-3
-- Maintainer  : pbrisbin@gmail.com
-- Stability   : experimental
-- Portability : POSIX
module Mdoc.Data.Option
  ( Option (..)
  , Option1 (..)
  ) where

import Mdoc.Prelude

import Mdoc.Data.Argument
import Mdoc.Data.Flag
import Mdoc.Pretty

data Option = Option
  { flag :: Flag
  , argument :: Argument
  }
  deriving stock (Eq, Show)

instance Pretty Option where
  pretty o =
    mconcat
      $ punctuate " , "
      $ mapFlag
        (\c -> shortArg c o.argument)
        (\s -> longArg s o.argument)
        o.flag

newtype Option1 = Option1
  { unwrap :: Option
  }

instance Pretty Option1 where
  pretty (Option1 o) =
    mapFlag1
      (\c -> shortArg c o.argument)
      (\s -> longArg s o.argument)
      o.flag

shortArg :: Char -> Argument -> Doc ann
shortArg c argument = "Fl" <+> pretty (ShortArg c argument)

longArg :: String -> Argument -> Doc ann
longArg s argument = "Fl Fl" <+> pretty (LongArg s argument)