json-to-haskell-0.0.1.0: src/JsonToHaskell/Internal/Options.hs
{-# LANGUAGE TemplateHaskell #-}
module JsonToHaskell.Internal.Options where
import Lens.Micro.Platform (makeLenses)
data NumberPreference =
SmartFloats
| SmartDoubles
| FloatNumbers
| DoubleNumbers
| ScientificNumbers
deriving (Show, Eq)
data TextType =
UseString
| UseText
| UseByteString
deriving (Show, Eq)
data MapType =
UseMap
| UseHashMap
deriving (Show, Eq)
data ListType =
UseList
| UseVector
deriving (Show, Eq)
data Options = Options
{ _tabStop :: Int
, _numberPreference :: NumberPreference
, _textType :: TextType
, _mapType :: MapType
, _listType :: ListType
, _includeImports :: Bool
, _stronglyNormalize :: Bool
, _strictData :: Bool
}
data Env = Env
{ _options :: Options
, _indentationLevel :: Int
}
makeLenses ''Options
makeLenses ''Env
defaultOptions :: Options
defaultOptions = Options
{ _tabStop = 2
, _numberPreference = DoubleNumbers
, _textType = UseText
, _mapType = UseMap
, _listType = UseList
, _includeImports = False
, _stronglyNormalize = True
, _strictData = False
}
performantOptions :: Options
performantOptions = Options
{ _tabStop = 2
, _numberPreference = DoubleNumbers
, _textType = UseText
, _mapType = UseMap
, _listType = UseList
, _includeImports = False
, _stronglyNormalize = True
-- TODO
, _strictData = True
}
data NumberType = Fractional | Whole
deriving (Show, Eq, Ord)