module Data.Aeson.TypeScript.Types where
import Control.Monad
import Control.Monad.Writer
import Control.Monad.Writer.Lazy
import qualified Data.Aeson as A
import qualified Data.Aeson.Types as A
import Data.Data
import Data.Monoid
import Data.Proxy
import Data.String
import Data.String.Interpolate.IsString
import qualified Data.Text as T
import qualified Data.Text.IO as T
import Language.Haskell.TH
import Language.Haskell.TH.Datatype
class TypeScript a where
getTypeScriptDeclarations :: Proxy a -> [TSDeclaration]
getTypeScriptDeclarations _ = []
getTypeScriptType :: Proxy a -> String
getTypeScriptOptional :: Proxy a -> Bool
getTypeScriptOptional _ = False
data TSDeclaration = TSInterfaceDeclaration { interfaceName :: String
, interfaceGenericVariables :: [String]
, interfaceMembers :: [TSField] }
| TSTypeAlternatives { typeName :: String
, typeGenericVariables :: [String]
, alternativeTypes :: [String]}
deriving (Show, Eq)
data TSField = TSField { fieldOptional :: Bool
, fieldName :: String
, fieldType :: String } deriving (Show, Eq)
newtype TSString a = TSString { unpackTSString :: String } deriving Show
instance IsString (TSString a) where
fromString x = TSString x
data FormattingOptions = FormattingOptions {
numIndentSpaces :: Int
}
defaultFormattingOptions = FormattingOptions 2
class HasJSONOptions a where
getJSONOptions :: (Proxy a) -> A.Options