@@ -43,6 +43,7 @@ module Language.Javascript.JSC.Value (
43 , valToStr
43 , valToStr
44 , valToObject
44 , valToObject
45 , valToText
45 , valToText
47 -- * Make JavaScript values from Haskell ones
48 -- * Make JavaScript values from Haskell ones
@@ -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)
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)
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
205+-- | Given a JavaScript value get a JSON string value.
206+-- May throw JSException.
208+-- >>> testJSC $ valToJSON 0 JSNull >>= strToText
210+-- >>> testJSC $ valToJSON 0 () >>= strToText
212+-- >>> testJSC $ valToJSON 0 True >>= strToText
214+-- >>> testJSC $ valToJSON 0 False >>= strToText
216+-- >>> testJSC $ valToJSON 0 (1.0 :: Double) >>= strToText
218+-- >>> testJSC $ valToJSON 0 (0.0 :: Double) >>= strToText
220+-- >>> testJSC $ valToJSON 0 "" >>= strToText
222+-- >>> testJSC $ valToJSON 0 "1" >>= strToText
224+-- >>> testJSC $ obj >>= valToJSON 0 >>= strToText
226+valToJSON :: MakeValueRef val => Word -> val -> JSC JSStringRef
227+valToJSON indent val = do
229+ rval <- makeValueRef val
230+ rethrow $ liftIO . jsvaluecreatejsonstring gctxt rval (fromIntegral indent)
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.