unused-0.6.0.0: src/Unused/Projection/Transform.hs
module Unused.Projection.Transform
( Transform(..)
, runTransformations
) where
import Data.Either (rights)
import Data.Text (Text)
import qualified Data.Text as T
import qualified Text.Inflections as I
import qualified Text.Inflections.Parse.Types 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 (T.pack . I.camelize) $ toMaybeWords t
toSnakecase :: Text -> Text
toSnakecase t = maybe t (T.pack . I.underscore) $ toMaybeWords t
toMaybeWords :: Text -> Maybe [I.Word]
toMaybeWords t =
U.safeHead $ rights [asCamel, asSnake]
where
asCamel = I.parseCamelCase [] $ T.unpack t
asSnake = I.parseSnakeCase [] $ T.unpack t