packages feed

court-0.1.0.0: src/Court/Plugin.hs

module Court.Plugin
  ( Plugin(..)
  , RunningPlugin(..)
  , PluginMap(..)
  , pluginMapToPairs
  ) where

import System.FilePath
import System.IO
import System.Process

data Plugin = Plugin
  { pluginExecutable :: FilePath
  , pluginArguments  :: [String]
  } deriving (Show, Read, Eq)

data RunningPlugin = RunningPlugin
  { runningPluginStdout  :: Handle
  , runningPluginProcess :: ProcessHandle
  , runningPluginOrigin  :: (FilePath, Plugin)
  }

newtype PluginMap = PluginMap [(FilePath, [Plugin])] deriving (Show, Read, Eq)

pluginMapToPairs :: FilePath -> PluginMap -> [(FilePath, Plugin)]
pluginMapToPairs basePath (PluginMap pairs) =
  let mkPair path plugin = (if isRelative path then basePath </> path else path, plugin)
  in concat $ map (\(path, plugins) -> map (\plugin -> mkPair path plugin) plugins) pairs