Revision 706f7f51

b/htools/Ganeti/HTools/JSON.hs
29 29
  , fromObj
30 30
  , maybeFromObj
31 31
  , fromObjWithDefault
32
  , fromKeyValue
32 33
  , fromJVal
33 34
  , asJSObject
34 35
  , asObjectList
......
95 96
              -> J.JSValue  -- ^ The value to read
96 97
              -> m a
97 98
fromKeyValue k val =
98
  fromJResult (printf "key '%s', value '%s'" k (show val)) (J.readJSON val)
99
  fromJResult (printf "key '%s'" k) (J.readJSON val)
99 100

  
100 101
-- | Small wrapper over readJSON.
101 102
fromJVal :: (Monad m, J.JSON a) => J.JSValue -> m a
b/htools/Ganeti/THH.hs
63 63

  
64 64
import qualified Text.JSON as JSON
65 65

  
66
import Ganeti.HTools.JSON
67

  
66 68
-- * Exported types
67 69

  
68 70
type Container = M.Map String
......
205 207
          | otherwise = AppE f x
206 208

  
207 209
-- | Container loader
208
readContainer :: (Monad m) => JSON.JSObject a -> m (Container a)
209
readContainer = return . M.fromList . JSON.fromJSObject
210
readContainer :: (Monad m, JSON.JSON a) =>
211
                 JSON.JSObject JSON.JSValue -> m (Container a)
212
readContainer obj = do
213
  let kjvlist = JSON.fromJSObject obj
214
  kalist <- mapM (\(k, v) -> fromKeyValue k v >>= \a -> return (k, a)) kjvlist
215
  return $ M.fromList kalist
210 216

  
211 217
-- | Container dumper
212 218
showContainer :: (JSON.JSON a) => Container a -> JSON.JSValue

Also available in: Unified diff