summaryrefslogtreecommitdiff
path: root/src/Propellor/Types/Result.hs
diff options
context:
space:
mode:
authorJoey Hess2015-01-25 15:16:58 -0400
committerJoey Hess2015-01-25 15:16:58 -0400
commit401b857eef13ca7d3f7b8f6b88e9237884fcd906 (patch)
treeeb4b5c189349b5a86b3b39edbe039956d3a1a3b8 /src/Propellor/Types/Result.hs
parent1df70ba81ddfbd4ceeb5344793f7714a35706c8f (diff)
parentcdd88b080af534231aae8a64ef327f0597a5b5b3 (diff)
Merge branch 'joeyconfig'
Conflicts: doc/todo/info_propigation_out_of_nested_properties.mdwn privdata.joey/privdata.gpg
Diffstat (limited to 'src/Propellor/Types/Result.hs')
-rw-r--r--src/Propellor/Types/Result.hs37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/Propellor/Types/Result.hs b/src/Propellor/Types/Result.hs
new file mode 100644
index 00000000..9def9a3f
--- /dev/null
+++ b/src/Propellor/Types/Result.hs
@@ -0,0 +1,37 @@
+module Propellor.Types.Result where
+
+import Data.Monoid
+import System.Console.ANSI
+
+-- | There can be three results of satisfying a Property.
+data Result = NoChange | MadeChange | FailedChange
+ deriving (Read, Show, Eq)
+
+instance Monoid Result where
+ mempty = NoChange
+
+ mappend FailedChange _ = FailedChange
+ mappend _ FailedChange = FailedChange
+ mappend MadeChange _ = MadeChange
+ mappend _ MadeChange = MadeChange
+ mappend NoChange NoChange = NoChange
+
+class ToResult t where
+ toResult :: t -> Result
+
+instance ToResult Bool where
+ toResult False = FailedChange
+ toResult True = MadeChange
+
+-- | Results of actions, with color.
+class ActionResult a where
+ getActionResult :: a -> (String, ColorIntensity, Color)
+
+instance ActionResult Bool where
+ getActionResult False = ("failed", Vivid, Red)
+ getActionResult True = ("done", Dull, Green)
+
+instance ActionResult Result where
+ getActionResult NoChange = ("ok", Dull, Green)
+ getActionResult MadeChange = ("done", Vivid, Green)
+ getActionResult FailedChange = ("failed", Vivid, Red)