unused-0.7.0.0: src/Unused/Projection/Transform.hs
module Unused.Projection.Transform
( Transform(..)
, runTransformations
) where
import Data.Either (rights)
import Data.Text (Text)
import qualified Text.Inflections as I
import qualified Unused.Util as U
data Transform
= Camelcase
| Snakecase
| Noop
runTransformations :: Text -> [Transform] -> Text
runTransformations = foldl (flip runTransformation)
runTransformation :: Transform -> Text -> Text
runTransformation Camelcase = toCamelcase
runTransformation Snakecase = toSnakecase
runTransformation Noop = id
toCamelcase :: Text -> Text
toCamelcase t = maybe t I.camelize $ toMaybeWords t
toSnakecase :: Text -> Text
toSnakecase t = maybe t I.underscore $ toMaybeWords t
toMaybeWords :: Text -> Maybe [I.SomeWord]
toMaybeWords t =
U.safeHead $ rights [asCamel, asSnake]
where
asCamel = I.parseCamelCase [] t
asSnake = I.parseSnakeCase [] t