Revision 0ec8cce2 src/Ganeti/JSON.hs
b/src/Ganeti/JSON.hs | ||
---|---|---|
40 | 40 |
, asJSObject |
41 | 41 |
, asObjectList |
42 | 42 |
, tryFromObj |
43 |
, arrayMaybeFromJVal |
|
43 | 44 |
, tryArrayMaybeFromObj |
44 | 45 |
, toArray |
45 | 46 |
, optionalJSField |
... | ... | |
142 | 143 |
JSRecord -> String -> a -> m a |
143 | 144 |
fromObjWithDefault o k d = liftM (fromMaybe d) $ maybeFromObj o k |
144 | 145 |
|
146 |
arrayMaybeFromJVal :: (J.JSON a, Monad m) => J.JSValue -> m [Maybe a] |
|
147 |
arrayMaybeFromJVal (J.JSArray xs) = |
|
148 |
mapM parse xs |
|
149 |
where |
|
150 |
parse J.JSNull = return Nothing |
|
151 |
parse x = liftM Just $ fromJVal x |
|
152 |
arrayMaybeFromJVal v = |
|
153 |
fail $ "Expecting array, got '" ++ show (pp_value v) ++ "'" |
|
154 |
|
|
145 | 155 |
-- | Reads an array of optional items |
146 | 156 |
arrayMaybeFromObj :: (J.JSON a, Monad m) => |
147 | 157 |
JSRecord -> String -> m [Maybe a] |
148 | 158 |
arrayMaybeFromObj o k = |
149 | 159 |
case lookup k o of |
150 |
Just (J.JSArray xs) -> mapM parse xs |
|
151 |
where |
|
152 |
parse J.JSNull = return Nothing |
|
153 |
parse x = liftM Just $ fromJVal x |
|
160 |
Just a -> arrayMaybeFromJVal a |
|
154 | 161 |
_ -> fail $ buildNoKeyError o k |
155 | 162 |
|
156 | 163 |
-- | Wrapper for arrayMaybeFromObj with better diagnostic |
Also available in: Unified diff