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