{-# LANGUAGE LambdaCase #-}
module Data.Aeson.Schema.Show
( SchemaType(..)
, showSchemaType
) where
import Data.List (intercalate)
data SchemaType
= SchemaBool
| SchemaInt
| SchemaDouble
| SchemaText
| SchemaCustom String
| SchemaMaybe SchemaType
| SchemaList SchemaType
| SchemaObject [(String, SchemaType)]
deriving (Show)
showSchemaType :: SchemaType -> String
showSchemaType schema = case schema of
SchemaBool -> "SchemaBool"
SchemaInt -> "SchemaInt"
SchemaDouble -> "SchemaDouble"
SchemaText -> "SchemaText"
SchemaCustom s -> "SchemaCustom " ++ s
SchemaMaybe inner -> "SchemaMaybe " ++ showSchemaType' inner
SchemaList inner -> "SchemaList " ++ showSchemaType' inner
SchemaObject _ -> "SchemaObject " ++ showSchemaType' schema
where
showSchemaType' = \case
SchemaBool -> "Bool"
SchemaInt -> "Int"
SchemaDouble -> "Double"
SchemaText -> "Text"
SchemaCustom s -> s
SchemaMaybe inner -> "Maybe " ++ showSchemaType' inner
SchemaList inner -> "List " ++ showSchemaType' inner
SchemaObject pairs -> "{" ++ intercalate ", " (map showPair pairs) ++ "}"
showPair (key, inner) = "\"" ++ key ++ "\": " ++ showSchemaType' inner