rospkg-0.2.2.0: src/Robotics/ROS/Pkg/Msgs.hs
-- |
-- Module : Robotics.ROS.Pkg.Msgs
-- Copyright : Alexander Krupenkin 2016
-- License : BSD3
--
-- Maintainer : mail@akru.me
-- Stability : experimental
-- Portability : POSIX / WIN32
--
-- ROS messages placed on "msg" directory in package root. This
-- package contains its directory observer for given package.
--
module Robotics.ROS.Pkg.Msgs (
-- ** Single package request
pkgMessages
-- ** All-in-one request
, messageList
) where
import System.FilePath (takeExtension, joinPath)
import System.Directory (doesDirectoryExist,
getDirectoryContents)
import Robotics.ROS.Pkg.Finder
import Robotics.ROS.Pkg.Types
-- | Take message files of given package
pkgMessages :: Package -> IO [FilePath]
pkgMessages pkg = do
msgDirExist <- doesDirectoryExist msgDir
if msgDirExist
then do msgFiles <- getDirectoryContents msgDir
return $ filter ((== ".msg") . takeExtension) msgFiles
else return []
where msgDir = joinPath [path pkg, "msg"]
-- | Search message files for all packages.
--
-- Like to
--
-- @
-- packageList >>= mapM pkgMessages
-- @
--
messageList :: IO [(Package, [FilePath])]
messageList = do
pkgs <- packageList
msgs <- mapM pkgMessages pkgs
return (zip pkgs msgs)