module Servant.TypeScript.Util where

import Data.Char
import Data.Text (Text)
import qualified Data.Text as T


snakeToCamel :: Text -> Text
snakeToCamel :: Text -> Text
snakeToCamel Text
t = [Text] -> Text
toCamelList ([Text] -> Text) -> [Text] -> Text
forall a b. (a -> b) -> a -> b
$ Text -> Text -> [Text]
T.splitOn Text
"_" Text
t

toCamelList :: [Text] -> Text
toCamelList :: [Text] -> Text
toCamelList [] = Text
""
toCamelList [Text
x] = Text -> Text
T.toLower Text
x
toCamelList (Text
x:[Text]
xs) = [Text] -> Text
forall a. Monoid a => [a] -> a
mconcat (Text -> Text
T.toLower Text
x Text -> [Text] -> [Text]
forall a. a -> [a] -> [a]
: (Text -> Text) -> [Text] -> [Text]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Text -> Text
capitalize [Text]
xs)

capitalize :: Text -> Text
capitalize :: Text -> Text
capitalize Text
t | Text -> Int
T.length Text
t Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
1 = Text -> Text
T.toUpper Text
t
capitalize Text
t = Char -> Char
toUpper (Text -> Char
T.head Text
t) Char -> Text -> Text
`T.cons` Text -> Text
T.tail Text
t