packages feed

poppy-codegen-1.0.0: src/Poppy/Codegen/TextUtil.hs

module Poppy.Codegen.TextUtil
  ( lowerFirst,
    upperFirst,
    camelToSnake,
  )
where

import Data.Char (isUpper, toLower, toUpper)
import Data.Text (Text)
import qualified Data.Text as T

lowerFirst :: Text -> Text
lowerFirst t = case T.uncons t of
  Nothing -> t
  Just (c, rest) -> T.cons (toLower c) rest

upperFirst :: Text -> Text
upperFirst t = case T.uncons t of
  Nothing -> t
  Just (c, rest) -> T.cons (toUpper c) rest

camelToSnake :: Text -> Text
camelToSnake =
  T.dropWhile (== '_') . T.concatMap step
  where
    step c
      | isUpper c = T.pack ['_', toLower c]
      | otherwise = T.singleton c