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