{-# LANGUAGE DeriveGeneric #-}

-- |
-- Module      : Docs.FullDocument
-- Description : Document With Emplaced Tree and Text Revisions
-- License     : AGPL-3
-- Maintainer  : stu235271@mail.uni-kiel.de
--               stu236925@mail.uni-kiel.de
module Docs.FullDocument (FullDocument (..)) where

import Docs.Document (Document)
import Docs.TreeRevision (TreeRevision)

import Data.Aeson (FromJSON, ToJSON)
import Data.OpenApi (ToSchema)
import GHC.Generics (Generic)

-- | A »full« document, with a @TreeRevision@, where @TextElementRevision@s are
-- emplaced for all @TextElement@s.
data FullDocument a = FullDocument
    { forall a. FullDocument a -> Document
header :: Document
    -- ^ metadata about the @Document@
    , forall a. FullDocument a -> Maybe (TreeRevision a)
body :: Maybe (TreeRevision a)
    -- ^ a »full« @TreeRevision@ for the @Document@
    }
    deriving ((forall x. FullDocument a -> Rep (FullDocument a) x)
-> (forall x. Rep (FullDocument a) x -> FullDocument a)
-> Generic (FullDocument a)
forall x. Rep (FullDocument a) x -> FullDocument a
forall x. FullDocument a -> Rep (FullDocument a) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall a x. Rep (FullDocument a) x -> FullDocument a
forall a x. FullDocument a -> Rep (FullDocument a) x
$cfrom :: forall a x. FullDocument a -> Rep (FullDocument a) x
from :: forall x. FullDocument a -> Rep (FullDocument a) x
$cto :: forall a x. Rep (FullDocument a) x -> FullDocument a
to :: forall x. Rep (FullDocument a) x -> FullDocument a
Generic)

instance (ToJSON a) => ToJSON (FullDocument a)

instance (FromJSON a) => FromJSON (FullDocument a)

instance (ToSchema a) => ToSchema (FullDocument a)