packages feed

buttplug-hs-core-0.1.0.0: src/Buttplug/Core/Internal/JSONUtils.hs

module Buttplug.Core.Internal.JSONUtils where

import Data.Aeson (Options(..), defaultOptions, JSONKeyOptions(..), defaultJSONKeyOptions)
import Data.Aeson.Casing

-- TODO some of the uses of pascalCase are probably redundant

stripPrefix :: String -> String -> String
stripPrefix s = drop $ length s

stripPrefixOptions s = defaultOptions { fieldLabelModifier = stripPrefix s }

stripPrefixKeyOptions s = defaultJSONKeyOptions { keyModifier = stripPrefix s }

pascalCaseOptions :: Options
pascalCaseOptions = defaultOptions { fieldLabelModifier = pascalCase }

pascalCaseKeyOptions :: JSONKeyOptions
pascalCaseKeyOptions = defaultJSONKeyOptions { keyModifier = pascalCase }

deviceMessageOptions :: Options
deviceMessageOptions =
  defaultOptions { constructorTagModifier = stripPrefix "Dev" }

msgAttributeOptions :: Options
msgAttributeOptions =
  defaultOptions { omitNothingFields = True
                 , fieldLabelModifier = pascalCase . stripPrefix "attr"}