diff --git a/Ganeti/HTools/Simu.hs b/Ganeti/HTools/Simu.hs index 29bf6ff9440f405a7f8756c1e57224be1ab68e3d..07656b4646ec11b00d76d4c79a5423215c016fe2 100644 --- a/Ganeti/HTools/Simu.hs +++ b/Ganeti/HTools/Simu.hs @@ -38,18 +38,6 @@ import Ganeti.HTools.Types import qualified Ganeti.HTools.Node as Node import qualified Ganeti.HTools.Instance as Instance --- | Parse results from readsPrec -parseChoices :: (Monad m, Read a) => String -> String -> [(a, String)] -> m a -parseChoices _ _ ((v, ""):[]) = return v -parseChoices name s ((_, e):[]) = - fail $ name ++ ": leftover characters when parsing '" - ++ s ++ "': '" ++ e ++ "'" -parseChoices name s _ = fail $ name ++ ": cannot parse string '" ++ s ++ "'" - --- | Safe 'read' function returning data encapsulated in a Result. -tryRead :: (Monad m, Read a) => String -> String -> m a -tryRead name s = parseChoices name s $ reads s - -- | Parse the string description into nodes parseDesc :: String -> Result (Int, Int, Int, Int) parseDesc desc = diff --git a/Ganeti/HTools/Text.hs b/Ganeti/HTools/Text.hs index aea0c00edef873bd8507d2ec832c747571cea36b..5fae5aa25b477f5084dee9befa9fa0a7ffc27619 100644 --- a/Ganeti/HTools/Text.hs +++ b/Ganeti/HTools/Text.hs @@ -40,18 +40,6 @@ import Ganeti.HTools.Types import qualified Ganeti.HTools.Node as Node import qualified Ganeti.HTools.Instance as Instance --- | Parse results from readsPrec -parseChoices :: (Monad m, Read a) => String -> String -> [(a, String)] -> m a -parseChoices _ _ ((v, ""):[]) = return v -parseChoices name s ((_, e):[]) = - fail $ name ++ ": leftover characters when parsing '" - ++ s ++ "': '" ++ e ++ "'" -parseChoices name s _ = fail $ name ++ ": cannot parse string '" ++ s ++ "'" - --- | Safe 'read' function returning data encapsulated in a Result. -tryRead :: (Monad m, Read a) => String -> String -> m a -tryRead name s = parseChoices name s $ reads s - -- | Load a node from a field list. loadNode :: (Monad m) => [String] -> m (String, Node.Node) loadNode (name:tm:nm:fm:td:fd:tc:fo:[]) = do diff --git a/Ganeti/HTools/Utils.hs b/Ganeti/HTools/Utils.hs index 295d6fcc0a264459de5ad318ed859fe94b6d7999..2cf8aae2c558209a0d3684a761ad3eee2d7a4215 100644 --- a/Ganeti/HTools/Utils.hs +++ b/Ganeti/HTools/Utils.hs @@ -34,6 +34,7 @@ module Ganeti.HTools.Utils , asJSObject , asObjectList , fromJResult + , tryRead ) where import Data.List @@ -125,3 +126,17 @@ asJSObject _ = fail "not an object" -- | Coneverts a list of JSON values into a list of JSON objects. asObjectList :: (Monad m) => [J.JSValue] -> m [J.JSObject J.JSValue] asObjectList = mapM asJSObject + +-- * Parsing utility functions + +-- | Parse results from readsPrec +parseChoices :: (Monad m, Read a) => String -> String -> [(a, String)] -> m a +parseChoices _ _ ((v, ""):[]) = return v +parseChoices name s ((_, e):[]) = + fail $ name ++ ": leftover characters when parsing '" + ++ s ++ "': '" ++ e ++ "'" +parseChoices name s _ = fail $ name ++ ": cannot parse string '" ++ s ++ "'" + +-- | Safe 'read' function returning data encapsulated in a Result. +tryRead :: (Monad m, Read a) => String -> String -> m a +tryRead name s = parseChoices name s $ reads s