-- | Aeson instances for definitions used for representing Fortran literals.

{-# OPTIONS_GHC -fno-warn-orphans #-}

module Language.Fortran.Extras.JSON.Literals() where

import Language.Fortran.Extras.JSON.Helpers
import Language.Fortran.Extras.JSON.Supporting()
import Data.Aeson
import Language.Fortran.AST.Literal
import qualified Language.Fortran.AST.Literal.Boz as Boz
import Language.Fortran.AST.Literal.Boz
import qualified Language.Fortran.AST.Literal.Real as Real
import Language.Fortran.AST.Literal.Real
import Language.Fortran.AST.Literal.Complex

instance ToJSON a => ToJSON (KindParam a) where toJSON :: KindParam a -> Value
toJSON = forall a.
(Generic a, GToJSON' Value Zero (Rep a)) =>
Options -> a -> Value
gtj forall a b. (a -> b) -> a -> b
$ String -> Options
jcSumDrop String
"KindParam"

-- TODO override to reparse/print?
instance ToJSON Boz.Conforming where toJSON :: Conforming -> Value
toJSON = forall a.
(Generic a, GToJSON' Value Zero (Rep a)) =>
Options -> a -> Value
gtj forall a b. (a -> b) -> a -> b
$ (String -> String) -> Options
jcEnum forall a. a -> a
id
instance ToJSON BozPrefix where toJSON :: BozPrefix -> Value
toJSON = forall a.
(Generic a, GToJSON' Value Zero (Rep a)) =>
Options -> a -> Value
gtj forall a b. (a -> b) -> a -> b
$ String -> Options
jcEnumDrop String
"BozPrefix"
instance ToJSON Boz where toJSON :: Boz -> Value
toJSON = forall a.
(Generic a, GToJSON' Value Zero (Rep a)) =>
Options -> a -> Value
gtj forall a b. (a -> b) -> a -> b
$ (String -> String) -> Options
jcProd forall a b. (a -> b) -> a -> b
$ forall a. Int -> [a] -> [a]
drop forall a b. (a -> b) -> a -> b
$ forall (t :: * -> *) a. Foldable t => t a -> Int
length String
"boz"

-- TODO override to reparse/print?
instance ToJSON Real.ExponentLetter where toJSON :: ExponentLetter -> Value
toJSON = forall a.
(Generic a, GToJSON' Value Zero (Rep a)) =>
Options -> a -> Value
gtj forall a b. (a -> b) -> a -> b
$ String -> Options
jcEnumDrop String
"ExpLetter"
instance ToJSON Real.Exponent where toJSON :: Exponent -> Value
toJSON = forall a.
(Generic a, GToJSON' Value Zero (Rep a)) =>
Options -> a -> Value
gtj forall a b. (a -> b) -> a -> b
$ String -> Options
jcProdDrop String
"exponent"
instance ToJSON RealLit where toJSON :: RealLit -> Value
toJSON = forall a.
(Generic a, GToJSON' Value Zero (Rep a)) =>
Options -> a -> Value
gtj forall a b. (a -> b) -> a -> b
$ String -> Options
jcProdDrop String
"realLit"

-- TODO override to reparse/print?
instance ToJSON a => ToJSON (ComplexPart a) where toJSON :: ComplexPart a -> Value
toJSON = forall a.
(Generic a, GToJSON' Value Zero (Rep a)) =>
Options -> a -> Value
gtj forall a b. (a -> b) -> a -> b
$ String -> Options
jcSumDrop String
"ComplexPart"
instance ToJSON a => ToJSON (ComplexLit a) where toJSON :: ComplexLit a -> Value
toJSON = forall a.
(Generic a, GToJSON' Value Zero (Rep a)) =>
Options -> a -> Value
gtj forall a b. (a -> b) -> a -> b
$ String -> Options
jcProdDrop String
"complexLit"