on master help sign in
Add valToJSON
f59399eHamish Mackenzie
src/Language/Javascript/JSC/Value.hs+33−4
@@ -43,6 +43,7 @@ module Language.Javascript.JSC.Value (
43 , valToStr
43 , valToStr
44 , valToObject
44 , valToObject
45 , valToText
45 , valToText
46+ , valToJSON
46
47
47 -- * Make JavaScript values from Haskell ones
48 -- * Make JavaScript values from Haskell ones
48 , val
49 , val
@@ -65,10 +66,10 @@ import Language.Javascript.JSC.Exception (rethrow)
65import Control.Monad.Trans.Reader (ask)
66import Control.Monad.Trans.Reader (ask)
66import Control.Monad.IO.Class (MonadIO, MonadIO(..))
67import Control.Monad.IO.Class (MonadIO, MonadIO(..))
67import Graphics.UI.Gtk.WebKit.JavaScriptCore.JSValueRef
68import Graphics.UI.Gtk.WebKit.JavaScriptCore.JSValueRef
69+ (jsvaluecreatejsonstring, JSType(..), jsvaluegettype,
68− (JSType(..), jsvaluegettype, jsvaluemakestring, jsvaluemakenumber,
70+ jsvaluemakestring, jsvaluemakenumber, jsvaluemakeboolean,
69− jsvaluemakeboolean, jsvaluemakeundefined, jsvaluemakenull,
71+ jsvaluemakeundefined, jsvaluemakenull, jsvaluetoobject,
70− jsvaluetoobject, jsvaluetostringcopy, jsvaluetonumber,
72+ jsvaluetostringcopy, jsvaluetonumber, jsvaluetoboolean)
71− jsvaluetoboolean)
72import Graphics.UI.Gtk.WebKit.JavaScriptCore.JSStringRef
73import Graphics.UI.Gtk.WebKit.JavaScriptCore.JSStringRef
73 (jsstringcreatewithcharacters, jsstringgetcharactersptr,
74 (jsstringcreatewithcharacters, jsstringgetcharactersptr,
74 jsstringgetlength)
75 jsstringgetlength)
@@ -83,6 +84,7 @@ import Language.Javascript.JSC.Classes
83 MakeArgRefs(..))
84 MakeArgRefs(..))
84import Language.Javascript.JSC.String (strToText, textToStr)
85import Language.Javascript.JSC.String (strToText, textToStr)
85import Language.Javascript.JSC.Arguments ()
86import Language.Javascript.JSC.Arguments ()
87+import Data.Word (Word)
86
88
87data JSNull = JSNull -- ^ Type that represents a value that can only be null.
89data JSNull = JSNull -- ^ Type that represents a value that can only be null.
88 -- Haskell of course has no null so we are adding this type.
90 -- Haskell of course has no null so we are adding this type.
@@ -200,6 +202,33 @@ valToStr val = do
200valToText :: MakeValueRef val => val -> JSC Text
202valToText :: MakeValueRef val => val -> JSC Text
201valToText jsvar = valToStr jsvar >>= strToText
203valToText jsvar = valToStr jsvar >>= strToText
202
204
205+-- | Given a JavaScript value get a JSON string value.
206+-- May throw JSException.
207+--
208+-- >>> testJSC $ valToJSON 0 JSNull >>= strToText
209+-- null
210+-- >>> testJSC $ valToJSON 0 () >>= strToText
211+--
212+-- >>> testJSC $ valToJSON 0 True >>= strToText
213+-- true
214+-- >>> testJSC $ valToJSON 0 False >>= strToText
215+-- false
216+-- >>> testJSC $ valToJSON 0 (1.0 :: Double) >>= strToText
217+-- 1
218+-- >>> testJSC $ valToJSON 0 (0.0 :: Double) >>= strToText
219+-- 0
220+-- >>> testJSC $ valToJSON 0 "" >>= strToText
221+-- ""
222+-- >>> testJSC $ valToJSON 0 "1" >>= strToText
223+-- "1"
224+-- >>> testJSC $ obj >>= valToJSON 0 >>= strToText
225+-- {}
226+valToJSON :: MakeValueRef val => Word -> val -> JSC JSStringRef
227+valToJSON indent val = do
228+ gctxt <- ask
229+ rval <- makeValueRef val
230+ rethrow $ liftIO . jsvaluecreatejsonstring gctxt rval (fromIntegral indent)
231+
203-- | Given a JavaScript value get its object value.
232-- | Given a JavaScript value get its object value.
204-- May throw JSException.
233-- May throw JSException.
205--
234--