module SimpleParams where
import Data.List hiding (find)
import Data.String.Utils
import Safe
import Data.Char
parseEmbedded :: String -> String
parseEmbedded str =
let splitted = split "#" str
in if length splitted /= 2 then ""
else if endswith "!" (splitted !! 1) then "{\"name\":\"" ++ splitted !! 0 ++ "\",\"type\":\"" ++ (replace "!" "" $ splitted !! 1) ++ "\",\"last\":true}"
else "{\"name\":\"" ++ splitted !! 0 ++ "\",\"type\":\"" ++ splitted !! 1 ++ "\"}"
processPart :: String -> String
processPart str =
let symb = headDef ' ' str
in if isDigit symb then str
else if symb == ','
|| symb == '['
|| symb == '{'
|| symb == ']'
|| symb == '}'
|| symb == ':'
then str
else if "#" `isInfixOf` str then parseEmbedded str
else "\"" ++ str ++ "\""
simpleParamsToJson :: String -> String
simpleParamsToJson sparams =
let s = (replace "," " , ")
. (replace "[" " [ ")
. (replace "{" " { ")
. (replace "]" " ] ")
. (replace "}" " } ")
. (replace ":" " : ")
$ sparams
in "{" ++ (foldl (++) "" $ map processPart $ splitWs s) ++ "}"