{-|
Module      : Data.Dson.Serializer
Copyright   : (c) Ezequiel Alvarez 2014
License     : MIT
Maintainer  : welcometothechango@gmail.com
Stability   : provisional
Portability : portable

Provides serializers from Dson to Strings formats.
-}

module Data.Dson.Serializer (dsonToJson) where

import Data.Dson.Parsec
import Data.List

wrapLiteral s = "\"" ++ s ++ "\""
interCommaMap f l = intercalate ", " $ map f l

-- | Takes a Dson value and turns it into a JSON string.
dsonToJson :: Dson -> String
dsonToJson (DSDict list) = "{ " ++ interCommaMap showDict list ++ " }"
    where showDict (key, val) = (wrapLiteral key) ++ ": " ++ (dsonToJson val)

dsonToJson (DSArray list) = "[" ++ interCommaMap dsonToJson list  ++ "]"
dsonToJson (DSString str) = wrapLiteral str
dsonToJson (DSNumber n) = show n
dsonToJson Yes = "true"
dsonToJson No = "false"
dsonToJson Empty = "null"