envstatus-1.0.2: src/EnvStatus/Output/Render.hs
module EnvStatus.Output.Render where
import Control.Applicative ((<$>))
import Control.Monad (join)
import Data.ConfigFile (ConfigParser)
import Data.Maybe (fromMaybe, isJust)
import EnvStatus.Config
import EnvStatus.Output.Types
import EnvStatus.Process
strip :: String -> String
strip s = reverse $ removeSpace $ reverse $ removeSpace s
where
removeSpace :: String -> String
removeSpace (' ':rest) = removeSpace rest
removeSpace ('\n':rest) = removeSpace rest
removeSpace noSpaces = noSpaces
renderTokenString :: ConfigParser -> [Token] -> IO String
renderTokenString cp tokens = do
results <- sequence $ renderToken cp <$> tokens
return $ join results
renderToken :: ConfigParser -> Token -> IO String
renderToken _ (Raw s) = pure s
renderToken cp (SubCommand c) = do
let cmd = getConfigValue cp $ strip c
if isJust cmd
then strip <$> runCommandAsync (fromMaybe "" cmd)
else return ("### Command not found for config key " ++ c ++ " ###")