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