packages feed

jordan-openapi-0.1.0.0: test/Jordan/OpenAPI/SpecDefs.hs

{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE OverloadedStrings #-}
module Jordan.OpenAPI.SpecDefs
    where

import qualified Data.Map as Map
import qualified Data.Text as T
import GHC.Generics (Generic)
import Jordan (FromJSON(..), ToJSON(..))

data Person
  = Person
  { firstName :: T.Text
  , lastName :: T.Text
  } deriving (Show, Generic)
  deriving anyclass (ToJSON, FromJSON)


data Managership
  = Managership
  { manager :: Person
  , underlings :: [Managership]
  , feelings :: Map.Map T.Text T.Text
  }
  deriving (Show, Generic)
  deriving anyclass (ToJSON, FromJSON)

data Rank
  = RankNested { top :: T.Text, nest :: Rank }
  | RankSplit { left :: Rank, right :: Rank }
  | RankBottom { label :: T.Text }
  deriving (Show, Generic)
  deriving anyclass (ToJSON, FromJSON)

data FileEntry
  = FileEntry
  { name :: T.Text
  , contents :: Either File Directory
  }
  deriving (Show, Eq, Ord, Generic)
  deriving anyclass (ToJSON, FromJSON)

newtype File = File { getFile :: T.Text }
  deriving (Show, Eq, Ord, Generic)
  deriving anyclass (ToJSON, FromJSON)

newtype Directory = Directory { getEntries :: [FileEntry] }
  deriving (Show, Eq, Ord, Generic)
  deriving anyclass (ToJSON, FromJSON)