-- | 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 = Options -> KindParam a -> Value
forall a.
(Generic a, GToJSON' Value Zero (Rep a)) =>
Options -> a -> Value
gtj (Options -> KindParam a -> Value)
-> Options -> KindParam a -> Value
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 = Options -> Conforming -> Value
forall a.
(Generic a, GToJSON' Value Zero (Rep a)) =>
Options -> a -> Value
gtj (Options -> Conforming -> Value) -> Options -> Conforming -> Value
forall a b. (a -> b) -> a -> b
$ (String -> String) -> Options
jcEnum String -> String
forall a. a -> a
id
instance ToJSON BozPrefix where toJSON :: BozPrefix -> Value
toJSON = Options -> BozPrefix -> Value
forall a.
(Generic a, GToJSON' Value Zero (Rep a)) =>
Options -> a -> Value
gtj (Options -> BozPrefix -> Value) -> Options -> BozPrefix -> Value
forall a b. (a -> b) -> a -> b
$ String -> Options
jcEnumDrop String
"BozPrefix"
instance ToJSON Boz where toJSON :: Boz -> Value
toJSON = Options -> Boz -> Value
forall a.
(Generic a, GToJSON' Value Zero (Rep a)) =>
Options -> a -> Value
gtj (Options -> Boz -> Value) -> Options -> Boz -> Value
forall a b. (a -> b) -> a -> b
$ (String -> String) -> Options
jcProd ((String -> String) -> Options) -> (String -> String) -> Options
forall a b. (a -> b) -> a -> b
$ Int -> String -> String
forall a. Int -> [a] -> [a]
drop (Int -> String -> String) -> Int -> String -> String
forall a b. (a -> b) -> a -> b
$ String -> Int
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 = Options -> ExponentLetter -> Value
forall a.
(Generic a, GToJSON' Value Zero (Rep a)) =>
Options -> a -> Value
gtj (Options -> ExponentLetter -> Value)
-> Options -> ExponentLetter -> Value
forall a b. (a -> b) -> a -> b
$ String -> Options
jcEnumDrop String
"ExpLetter"
instance ToJSON Real.Exponent where toJSON :: Exponent -> Value
toJSON = Options -> Exponent -> Value
forall a.
(Generic a, GToJSON' Value Zero (Rep a)) =>
Options -> a -> Value
gtj (Options -> Exponent -> Value) -> Options -> Exponent -> Value
forall a b. (a -> b) -> a -> b
$ String -> Options
jcProdDrop String
"exponent"
instance ToJSON RealLit where toJSON :: RealLit -> Value
toJSON = Options -> RealLit -> Value
forall a.
(Generic a, GToJSON' Value Zero (Rep a)) =>
Options -> a -> Value
gtj (Options -> RealLit -> Value) -> Options -> RealLit -> Value
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 = Options -> ComplexPart a -> Value
forall a.
(Generic a, GToJSON' Value Zero (Rep a)) =>
Options -> a -> Value
gtj (Options -> ComplexPart a -> Value)
-> Options -> ComplexPart a -> Value
forall a b. (a -> b) -> a -> b
$ String -> Options
jcSumDrop String
"ComplexPart"
instance ToJSON a => ToJSON (ComplexLit a) where toJSON :: ComplexLit a -> Value
toJSON = Options -> ComplexLit a -> Value
forall a.
(Generic a, GToJSON' Value Zero (Rep a)) =>
Options -> a -> Value
gtj (Options -> ComplexLit a -> Value)
-> Options -> ComplexLit a -> Value
forall a b. (a -> b) -> a -> b
$ String -> Options
jcProdDrop String
"complexLit"