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