mdoc-0.2.0.0: src/Mdoc/Data/Named.hs
-- |
--
-- Module : Mdoc.Data.Named
-- Copyright : (c) 2026 Patrick Brisbin
-- License : AGPL-3
-- Maintainer : pbrisbin@gmail.com
-- Stability : experimental
-- Portability : POSIX
module Mdoc.Data.Named
( Named (..)
, name
, addSecondary
) where
import Mdoc.Prelude
import Data.Aeson (object, (.=))
import Data.Text qualified as T
import Mdoc.Data.Page
import Mdoc.Optics
data Named = Named
{ names :: NonEmpty Text
, description :: Text
, page :: Page
}
deriving stock (Eq, Generic, Show)
instance ToJSON Named where
toJSON named =
object
[ "title" .= T.toUpper (esc $ head named.names)
, "name"
.= object
[ "init" .= map esc (init named.names)
, "last" .= esc (last named.names)
, "description" .= esc named.description
]
, "page" .= named.page
]
name :: Text -> Text -> Page -> Named
name primary description page =
Named {names = pure primary, description, page}
addSecondary :: Text -> Named -> Named
addSecondary x = field @"names" <>~ pure x