module SimpleParams where
import Data.List.Split
import Data.String.Utils (endswith, replace)
import Safe
import Data.Char
parseEmbedded :: String -> String
parseEmbedded str =
case splitOn "#" str of
[name, typ] ->
if endswith "@" typ
then "{\"name\":\"" ++ name ++ "\",\"type\":\"" ++ replace "@" "" typ ++ "\",\"last\":true}"
else "{\"name\":\"" ++ name ++ "\",\"type\":\"" ++ typ ++ "\"}"
_ -> ""
processPart :: String -> String
processPart str
| isDigit symb = str
| symb `elem` specialCharacters = str
| '#' `elem` str = parseEmbedded str
| otherwise = "\"" ++ str ++ "\""
where
symb = headDef ' ' str
simpleParamsToJson :: String -> String
simpleParamsToJson sparams =
"{" ++ concatMap processPart (splitOnSpecialCharacters sparams) ++ "}"
splitOnSpecialCharacters :: String -> [String]
splitOnSpecialCharacters = split $ dropBlanks $ oneOf specialCharacters
specialCharacters :: [Char]
specialCharacters = ",:[]{} "