mdoc-0.2.0.0: src/Mdoc/Data/Config.hs
-- |
--
-- Module : Mdoc.Data.Config
-- Copyright : (c) 2026 Patrick Brisbin
-- License : AGPL-3
-- Maintainer : pbrisbin@gmail.com
-- Stability : experimental
-- Portability : POSIX
module Mdoc.Data.Config
( Config (..)
, Schema (..)
) where
import Mdoc.Prelude
import Mdoc.Pretty
data Config = Config
{ name :: Maybe String
, schema :: Schema
}
deriving stock (Eq, Ord, Show)
deriving (ToJSON) via (Rendered Config)
instance Pretty Config where
pretty c = maybe id prefix c.name $ ":" <+> pretty c.schema
where
prefix :: String -> Doc ann -> Doc ann
prefix n x = "Cm" <+> pretty (esc $ pack n) <+> x
data Schema
= Simple Text
| AnyOf [Schema]
| ListOf Schema
deriving stock (Eq, Ord, Show)
instance IsString Schema where
fromString = Simple . pack
instance Pretty Schema where
pretty = \case
Simple t -> "Ar" <+> pretty (esc t)
AnyOf ss -> mconcat $ punctuate " Ns | Ns " $ map pretty ss
ListOf s@(AnyOf {}) -> "(" <+> pretty s <+> ") Ns []"
ListOf s -> pretty s <+> "Ns []"