-- -- Copyright © 2013-2015 Anchor Systems, Pty Ltd and Others -- -- The code in this file, and the program it is a part of, is -- made available to you by its authors as open source software: -- you can redistribute it and/or modify it under the terms of -- the 3-clause BSD licence. -- {-# LANGUAGE EmptyDataDecls #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} module Git.Vogue.Types where import Data.Monoid import Data.String import Data.Text.Lazy (Text) -- | Phantom type for Statuses related to checking data Check -- | Phantom type for Statuses related to fixing data Fix -- | Result of running a Plugin data Status a = Success PluginName Text | Failure PluginName Text | Catastrophe Int PluginName Text deriving (Show, Ord, Eq) -- | Absolute path to an executable newtype Plugin = Plugin { unPlugin :: FilePath } deriving (Show, Ord, Eq, IsString) -- | Nice, human readable name of a plugin newtype PluginName = PluginName { unPluginName :: Text } deriving (Show, Ord, Eq, IsString, Monoid) -- | We want the flexibility of just checking changed files, or maybe checking -- all of them. data SearchMode = FindAll | FindChanged deriving (Eq, Show) -- | An implementation of a "runner" of plugins. Mostly for easy testing. data PluginExecutorImpl m = PluginExecutorImpl{ executeFix :: SearchMode -> Plugin -> m (Status Fix), executeCheck :: SearchMode -> Plugin -> m (Status Check) }