Revision c96d44df Ganeti/HTools/Utils.hs
b/Ganeti/HTools/Utils.hs | ||
---|---|---|
93 | 93 |
-- * JSON-related functions |
94 | 94 |
|
95 | 95 |
-- | Converts a JSON Result into a monadic value. |
96 |
fromJResult :: Monad m => J.Result a -> m a |
|
97 |
fromJResult (J.Error x) = fail x |
|
98 |
fromJResult (J.Ok x) = return x |
|
99 |
|
|
100 |
annotateJResult :: Monad m => String -> J.Result a -> m a |
|
101 |
annotateJResult s (J.Error x) = fail (s ++ ": " ++ x) |
|
102 |
annotateJResult _ (J.Ok x) = return x |
|
96 |
fromJResult :: Monad m => String -> J.Result a -> m a |
|
97 |
fromJResult s (J.Error x) = fail (s ++ ": " ++ x) |
|
98 |
fromJResult _ (J.Ok x) = return x |
|
103 | 99 |
|
104 | 100 |
-- | Tries to read a string from a JSON value. |
105 | 101 |
-- |
... | ... | |
116 | 112 |
=> String -- ^ Operation description (for error reporting) |
117 | 113 |
-> String -- ^ Input message |
118 | 114 |
-> m [J.JSObject J.JSValue] |
119 |
loadJSArray s = annotateJResult s . J.decodeStrict
|
|
115 |
loadJSArray s = fromJResult s . J.decodeStrict
|
|
120 | 116 |
|
121 | 117 |
-- | Reads a the value of a key in a JSON object. |
122 | 118 |
fromObj :: (J.JSON a, Monad m) => String -> [(String, J.JSValue)] -> m a |
123 | 119 |
fromObj k o = |
124 | 120 |
case lookup k o of |
125 | 121 |
Nothing -> fail $ printf "key '%s' not found in %s" k (show o) |
126 |
Just val -> annotateJResult (printf "key '%s', value '%s'" k (show val))
|
|
122 |
Just val -> fromJResult (printf "key '%s', value '%s'" k (show val))
|
|
127 | 123 |
(J.readJSON val) |
128 | 124 |
|
129 | 125 |
-- | Annotate a Result with an ownership information |
Also available in: Unified diff