Revision f36a8028 Ganeti/HTools/Utils.hs

b/Ganeti/HTools/Utils.hs
31 31
    , readEitherString
32 32
    , loadJSArray
33 33
    , fromObj
34
    , maybeFromObj
34 35
    , tryFromObj
35 36
    , fromJVal
36 37
    , asJSObject
......
41 42
    , annotateResult
42 43
    ) where
43 44

  
45
import Control.Monad (liftM)
44 46
import Data.List
45 47
import qualified Text.JSON as J
46 48
import Text.Printf (printf)
......
114 116
               -> m [J.JSObject J.JSValue]
115 117
loadJSArray s = fromJResult s . J.decodeStrict
116 118

  
117
-- | Reads a the value of a key in a JSON object.
119
-- | Reads the value of a key in a JSON object.
118 120
fromObj :: (J.JSON a, Monad m) => String -> [(String, J.JSValue)] -> m a
119 121
fromObj k o =
120 122
    case lookup k o of
121 123
      Nothing -> fail $ printf "key '%s' not found in %s" k (show o)
122
      Just val -> fromJResult (printf "key '%s', value '%s'" k (show val))
123
                  (J.readJSON val)
124
      Just val -> fromKeyValue k val
125

  
126
-- | Reads the value of an optional key in a JSON object.
127
maybeFromObj :: (J.JSON a, Monad m) => String -> [(String, J.JSValue)]
128
                -> m (Maybe a)
129
maybeFromObj k o =
130
    case lookup k o of
131
      Nothing -> return Nothing
132
      Just val -> liftM Just (fromKeyValue k val)
133

  
134
-- | Reads a JValue, that originated from an object key
135
fromKeyValue :: (J.JSON a, Monad m)
136
              => String     -- ^ The key name
137
              -> J.JSValue  -- ^ The value to read
138
              -> m a
139
fromKeyValue k val =
140
  fromJResult (printf "key '%s', value '%s'" k (show val)) (J.readJSON val)
124 141

  
125 142
-- | Annotate a Result with an ownership information
126 143
annotateResult :: String -> Result a -> Result a

Also available in: Unified diff