module Data.Aeson.APIFieldJsonTH (
deriveApiFieldJSON
) where
import Prelude
import Data.Aeson.TH
import Control.Lens
import qualified Data.Char as C (toLower)
import Language.Haskell.TH (Q, Dec, Name)
import Data.List.Split
deriveApiFieldJSON :: Name -> Q[Dec]
deriveApiFieldJSON name = deriveJSON defaultOptions{fieldLabelModifier = firstLower . dropPrefix name} name
firstLower :: String -> String
firstLower (x:xs) = (C.toLower x):xs
typeName :: String -> String
typeName = view _last . splitOn "."
dropPrefix :: Name -> String -> String
dropPrefix = drop . (1 + ) . length . typeName . show